Reputation: 52565
The short version is that I have a protocol which has an optional parameter. When I build a class that implements it with the iPhone SDK 3.x it compiles just fine, with no errors or warnings. When I used the 2.x SDK I get the following warning:
Class.m:68: warning: property 'field' requires method '-field' to be defined - use @synthesize, @dynamic or provide a method implementation
It works just fine in both cases.
So two questions:
@dynamic
to the implementation which isn't really correct as the property really isn't there.Here's a quick sample of the kind of code I have to make things a little more obvious if I wasn't completely clear.
@protocol MyProtocol
@required
- (void) method:(NSString*)param;
@optional
@property (nonatomic,retain) NSString* field;
@end
@interface MyClass : NSObject<MyProtocol> {
}
- (void) method:(NSString*)param;
@end
Upvotes: 1
Views: 4244
Reputation: 17811
The simnple way to remove the warning is to add
@dynamic field;
to your implementation. That tells the compiler that you will provide the implementation dynamically, which you wont, becuase its an optional property, but that should shut the compiler up.
Upvotes: 1
Reputation: 237010
The iPhone SDK is not exactly identical to any paricular version of Mac OS X. Clearly a newer version of the toolset is included with SDK 3 that's more similar to the one from Snow Leopard.
Upvotes: 3
Reputation: 24040
The @optional was introduced in Objective-C 2.0 so it won't be applicable for older versions of the SDK. Your best bet is to determine whether it should be present (probably not) and then #ifdef that around with
#if __OBJC2__
@optional
@property ...
#endif
Then it should only compile under an OBJC2, and it won't be present in the older systems as part of the protocol itself.
Upvotes: 0