objective-c派生类可能不响应基类方法
我从第三方类派生,当我尝试调用基类中的方法时,我得到x可能不会响应y编译器警告 如何删除警告 复制:objective-c派生类可能不响应基类方法,objective-c,compiler-warnings,Objective C,Compiler Warnings,我从第三方类派生,当我尝试调用基类中的方法时,我得到x可能不会响应y编译器警告 如何删除警告 复制: @interface ThirdPartyBaseClass : NSObject {} +(id)build; -(void)doStuff; @end @implementation ThirdPartyBaseClass +(id) build{ return [[[self alloc] init] autorelease]; } -(void)doStuff{ } @end
@interface ThirdPartyBaseClass : NSObject {}
+(id)build;
-(void)doStuff;
@end
@implementation ThirdPartyBaseClass
+(id) build{
return [[[self alloc] init] autorelease];
}
-(void)doStuff{
}
@end
@interface MyDerivedClass : ThirdPartyBaseClass {}
+(id)buildMySelf;
@end
@implementation MyDerivedClass
+(id)buildMySelf{
self = [ThirdPartyBaseClass build];
[self doStuff]; // compiler warning here - 'MyDerivedClass' may not respond to '+doStuff'
return self;
}
@end
谢谢 您是否尝试过将
构建我自己
更改为:
+(id)buildMySelf{
self = [MyDerivedClass build];
[self doStuff];
return self;
}
使用
[ThirdPartyBaseClass构建]
生成第三方BaseClass的实例,而不是MyDerivedClass的实例。您是否尝试将BuildMyMy更改为:
+(id)buildMySelf{
self = [MyDerivedClass build];
[self doStuff];
return self;
}
使用[ThirdPartyBaseClass构建]
生成第三方BaseClass的实例,而不是MyDerivedClass的实例,而不是MyDerivedClass的实例-(void)doStuff是一个实例方法,但您是在编译器认为是类的情况下调用它的。
编译器认为self被类型化为类,而不是ThirdPartyBaseClass
对象
试一试
-(void)doStuff
是一个实例方法,但您是在编译器认为是类的情况下调用它的。
编译器认为self被类型化为类,而不是ThirdPartyBaseClass
对象
试一试
在类方法(前面有“+”)中,“self”不是类的实例;'“self”是类对象,它只响应类方法,而不响应实例方法。如果您正在构建一个实例,以便可以对其调用doStuff
,并返回它,则需要使用单独的变量:
+ (id) buildMySelf
{
MyDerivedClass *myDerivedClassInstance;
myDerivedClassInstance = [self build];
[myDerivedClassInstance doStuff];
return myDerivedClassInstance;
}
在类方法(前面有“+”)中,“self”不是类的实例;'“self”是类对象,它只响应类方法,而不响应实例方法。如果您正在构建一个实例,以便可以对其调用doStuff
,并返回它,则需要使用单独的变量:
+ (id) buildMySelf
{
MyDerivedClass *myDerivedClassInstance;
myDerivedClassInstance = [self build];
[myDerivedClassInstance doStuff];
return myDerivedClassInstance;
}
这仍然会产生“可能不响应…”警告这仍然会产生“可能不响应…”警告