-1

重複の可能性:
cocoa object-c クラスの変数の前にあるアンダースコアはどのように機能しますか?

最近、次のような宣言をよく見かけます。

@property SomeClass* foo;

@synthesize foo=_foo;

ほとんどの例では ARC も使用されていますが、これに関連しているかどうかはわかりません。明らかな何かが欠けているような気がしますが、指を置くことはできません。

何か案が?

4

1 に答える 1

1

ARC には接続されていません。@property キーワードは、コンパイラ (およびクラス ユーザー) に対して、その「プロパティ」のゲッター メソッドとセッター メソッドがあることを示すために使用される機能です。この場合、「foo」というゲッターメソッドと「setFoo」というセッターメソッドが存在することが予想されます。@synthesize キーワードは、独自の getter メソッドと setter メソッドを合成するのではなく、汎用の getter メソッドと setter メソッドを合成するようにコンパイラに指示します。@synthesize foo=_foo は、"_foo" と呼ばれるバッキング インスタンス変数を使用して、これらのジェネリック メソッドを合成するようコンパイラに指示しています。この _propertyName 表記は、多くのオブジェクティブ C 開発者が使用するスタイル上の選択です。基本的な結果は、次のコードを取得することです。

- (SomeClass *)foo
{
   return _foo;
}

- (void)setFoo:(SomeClass *)value
{
    _foo = value;
}

コンパイラが合成されたゲッターとセッターで提供するいくつかの追加機能があるかもしれませんが、それはその要点です。

于 2012-09-07T05:52:40.753 に答える