我收到以下警告:
Instance method 'method name' not found (return type defaults to 'id')
调用此代码时:
@protocol SomeProtocol <NSObject> {
@property (nonatomic, retain) SpecificClassName* someDelegate;
}
...
+ (void) aMethod : (id <SomeProtocol>) object {
[object.someDelegate doSomeThing]; // warning statement show up here
}
我觉得这是编译器在这一点上的一个短暂的来临,但这可能是调用水壶黑的锅...有没有人对此有任何反馈?
答案 0 :(得分:1)
在您的实施(#import
文件)中,您需要SpecificClassName
.m
的标头文件。
如果您要在头文件中使用类型名SpecificClassName
,前向声明@class SpecificClassName
将会执行,但是在类上调用方法需要编译器知道返回类型方法。
如果要在SpecificClassName
的实例上调用方法,请包含其定义的标题。
答案 1 :(得分:0)
我的意思是该类的头文件不包含方法签名。所以编译器无法判断该方法是否实际存在。修复头文件以消除警告。
在Java或C ++中,这将是编译失败。那是因为它们在编译时进行方法绑定,因此编译器需要查找方法。 Objective-C在运行时完成;它向对象发送一个方法调用,该对象可能有也可能没有这样的方法。