简短的版本是我有一个带有可选参数的协议。当我构建一个使用 iPhone SDK 3.x 实现它的类时,它编译得很好,没有错误或警告。当我使用 2.x SDK 时,我收到以下警告:
Class.m:68: warning: property 'field' requires method '-field' to be defined - use @synthesize, @dynamic or provide a method implementation
在这两种情况下都可以正常工作。
所以两个问题:
- 修复警告的正确方法是什么?我添加
@dynamic
到不正确的实现中,因为该属性确实不存在。 - 为什么在 SDK 3.x 中有效但在 2.x 中无效?文档说“在 Mac OS X v10.5 上,协议可能不包括可选的声明属性。” 显然,情况并非如此。
如果我不完全清楚,这是我必须使事情变得更加明显的那种代码的快速示例。
@protocol MyProtocol
@required
- (void) method:(NSString*)param;
@optional
@property (nonatomic,retain) NSString* field;
@end
@interface MyClass : NSObject<MyProtocol> {
}
- (void) method:(NSString*)param;
@end