短いバージョンでは、オプションのパラメータを持つプロトコルを使用しています。私が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
どちらの場合でもうまく動作します。
ので、2つの質問:
- 警告を修正する正しい方法は何ですか?私は
@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
あなたが正しいと思います。警告を排除するための好ましい方法を知っていますか?それとも、SDK 2.xを使って「しないでください」というケースですか? –
さて、警告しないでください。 SDK3の新機能です。 – Chuck