0

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

私はiOSアプリ開発の初心者です。多くのチュートリアルを調べたところ、次の行に出くわしました

.h ファイルには以下が含まれます。

@property (strong) ScaryBugData *data;

.m には以下が含まれます。

@synthesize data = _data; 

しかし、意味がわかりませんdata = _data。なぜこれが必要なのか、それが何を意味するのか。

参照: http://www.raywenderlich.com/1797/how-to-create-a-simple-iphone-app-tutorial-part-1

4

2 に答える 2

2

_data自動的に作成されるインスタンス変数の名前です。
datagetter と setter を持つプロパティの名前です。

カスタム ivar 名を指定しない場合は、デフォルトでプロパティの名前になります。

この場合、 を使用して ivar を直接設定する_data = [ScaryBugData data]か、 を使用してセッターを使用できますself.data = [ScaryBugData data]。取得も同様です。

合成されたセッターは、古い値が適切に解放され、新しい値が適切に保持され、内部にいくつかのものがあることを確認します。

于 2012-07-09T13:39:25.433 に答える
1

self.data にアクセスする場合は、getter/setter メソッドを呼び出しています。_data を割り当てると、セッター メソッドをバイパスし、変数に直接アクセスします。これは、たとえば、セッターまたはゲッターが、この特定のケースで望ましくない他のことを行っている場合に役立ちます。

Java の世界では、これは this.thing=xyz と setThing(xyz) の呼び出しに相当します。

たとえば Core Data テンプレートを見ると、変数を取得するだけでなく、たとえば managedObjectContext アクセサーがどのように追加の作業を行っているかがわかります。

于 2012-07-09T13:40:21.663 に答える