私は最近、古いXcodeプロジェクト(以前は問題なくコンパイルされていました)をコンパイルしようとしましたが、この形式のエラーがたくさん表示されています。
error: writable atomic property 'someProperty' cannot pair a synthesized setter/getter with a user defined setter/getter
これらのエラーの原因となるコードパターンは常に次のようになります。
// Interface:
@property (retain) NSObject * someProperty;
// Implementation:
@synthesize someProperty; // to provide the getter
- (void)setSomeProperty:(NSObject *)newValue
{
//..
}
エラーが発生している理由がわかります。プロパティアクセサー(ゲッターとセッターの両方)を合成するようコンパイラーに指示し、その後すぐに手動でセッターをオーバーライドします。そのコードは常に少しにおいがしていました。
それで、これを行う適切な方法は何ですか?の@dynamic
代わりに使用する場合は@synthesize
、ゲッターも作成する必要があります。それが唯一の方法ですか?
atomic
プロパティでのみ発生しますか?アトミックプロパティの場合は、ロック戦略に関してゲッター/セッターのペアを同期させることをお勧めします。一方が合成され、他方がカスタムコードである場合、これは困難です。