Xcode 4.4 のリリース ノートを読んでいて、次のことに気付きました。
LLVM 4.0 コンパイラ
Xcode には、次の新しい Objective-C 言語機能を含む、Apple LLVM コンパイラ バージョン 4.0 が含まれるようになりました。
- デフォルトの @synthesize: 実装されていない場合、@property を自動的に合成します
この機能に興味があります。それはどのように機能しますか?を削除してみましたが@synthesize、うまくいきません。
Xcode 4.4 のリリース ノートを読んでいて、次のことに気付きました。
LLVM 4.0 コンパイラ
Xcode には、次の新しい Objective-C 言語機能を含む、Apple LLVM コンパイラ バージョン 4.0 が含まれるようになりました。
- デフォルトの @synthesize: 実装されていない場合、@property を自動的に合成します
この機能に興味があります。それはどのように機能しますか?を削除してみましたが@synthesize、うまくいきません。
実際に動作します。プロジェクトとターゲット設定でコンパイラが LLVM 4.0 に設定されていることを確認してください。@synthesize 行を削除すると、次の 2 つの方法でアクセスできます。
self.myProperty を使用してアクセサーを介して、または _myProperty を使用してそれぞれのインスタンス変数を介して (アンダーバーは自動的に追加されます)。
それだけではうまくいかないケースが多いです。これらはすべて、ここで例外として概説されています。
http://useyourloaf.com/blog/2012/08/01/property-synthesis-with-xcode-4-dot-4.html
しかし、私にとって最も重要なものは、
デフォルト以外のゲッターとセッターを使用した readwrite プロパティ
これは、プロパティが一般向けの ivars でない限り、@synthesize を含める必要があることを意味します。別の言い方をすれば、カプセル化をうまく使ってセッターとゲッターを埋めていたら、これは使えません。
後の注:ここで指定された条件についてはよくわかりませんが、遭遇するほぼすべての状況に対して自動合成された ivar があることがわかりました。