Appleの例のいくつかには、プロパティにaretain
とreadonly
修飾子の両方が含まれていることに気づきました。モディファイアretain
を使用しているときにセッターが生成されない場合を含めることのポイントは何ですか?readonly
例:@property (retain, readonly) NSString *title;
AnimatedTableViewサンプルから。
Appleの例のいくつかには、プロパティにaretain
とreadonly
修飾子の両方が含まれていることに気づきました。モディファイアretain
を使用しているときにセッターが生成されない場合を含めることのポイントは何ですか?readonly
例:@property (retain, readonly) NSString *title;
AnimatedTableViewサンプルから。
または、より具体的には、(読み取り専用、保持)は次のようなパターンを有効にします。
Foo.h:
@interface StuffHolder:NSObject
@property(readonly, retain) MyStuff *stuff;
@end
Foo.m:
@interface StuffHolder()
@property(readwrite, retain) MyStuff *stuff;
@end
@implementation StuffHolder
@synthesize stuff;
@end
最終結果は、実装内で読み取り/書き込みが行われている間はパブリックに読み取り専用であり、setterとgetterの両方がコンパイラーによって自動的に合成されるプロパティです。
クラス拡張に(読み取り/書き込み、保持)オーバーライドがない場合(類似したもの)に警告がstatement without an effect
生成される可能性がありますが、有益というよりは混乱を招きます。また、組み合わせ全体でさまざまなエッジケースが多数あり、同様に警告が必要ですが、実際の問題を示すものではありません。単純化のために、さまざまなパターンを文句なしに大部分受け入れることが決定されました(それらは正確性の問題ではないため)。
クラス拡張に2番目のプライベート読み取り/書き込み宣言を含めることができます。すべての参照のメモリ管理スキームはIIRCと一致する必要があるため、「読み取り専用、保持」のような愚かさを感じることになります。