Objective-C プログラミング言語ドキュメントのプロパティの再宣言の章を読みましたが、次のプロパティの再宣言について明確にしていただける方がいらっしゃいましたらお願いします。
// MyObject.h public header file
@interface MyObject : NSObject {
NSString *language;
}
@property (readonly, copy) NSString *language;
@end
// MyObject.m private implementation file
@interface MyObject ()
@property (readwrite, copy) NSString *language;
@end
@implementation MyObject
@synthesize language;
@end
@property
上記のキーワードと@synthesize
キーワードが次のコードを生成するかどうかを理解したいだけです。
// MyObject.h public header file
@interface MyObject : NSObject {
NSString *language;
}
-(NSString *)language;
@end
// MyObject.m private implementation file
@interface MyObject ()
-(void)setLanguage: (NSString *) aString;
@end
@implementation MyObject
-(NSString *)language {
return language;
}
-(void)setLanguage: (NSString *) aString {
[language release];
language = [aString copy];
}
@end
そのため、コンパイラは最初の@property
宣言を見て、パブリック インターフェイスに getter メソッドを追加します...実装ファイルになると、同じプロパティの別の@property
宣言を見つけますが、プライベート インターフェイス内に readwrite 属性があり、ゲッターは既にパブリック インターフェイスに追加されているため、セッター メソッドのみを追加します。その後、@synthesize
キーワードが見つかり、両方の実装がプライベート実装セクションに追加されます。最初の@property
宣言の copy 属性は必要ありません。セッターは必要ありませんが、2 番目のプロパティの再宣言と一致するように指定する必要があります。私の考えは正しいですか?