7

Objective-Cクラスで使用する場合self.varと使用する場合の違いは何ですか?varどちらか一方にメリットや危険性はありますか?

4

3 に答える 3

6

self.varのプロパティを呼び出しますvar。舞台裏では、Objective-Cはプロパティのゲッターを自動的に生成します(または、傾斜している場合は自分で作成できます)。そのため、self.varそのゲッターを使用します。プレーンvarはインスタンス変数に直接アクセスします(つまり、値を取得するためにゲッターを通過しません)。

于 2011-01-07T16:24:10.773 に答える
5
foo = self.var;
self.var = foo;

概念的にはと同じです

foo = [self var];
[self setVar: foo];

したがって、ドット表記を使用すると、実際にメッセージを自分自身に送信していることになります。

foo = var;
var = foo;

概念的には

foo = self->var;
self->var = foo;

したがって、インスタンス変数にアクセスするためにドット表記を使用しないことは、selfをC構造体へのポインターとして扱い、構造体フィールドに直接アクセスすることと同じです。

ほとんどの場合、プロパティ(ドット表記またはメッセージ送信表記のいずれか)を使用することをお勧めします。これは、メモリリークを停止するために必要な保持/コピー/解放を自動的に実行するようにプロパティを作成できるためです。また、プロパティでKeyValueObservingを使用することもできます。また、サブクラスはプロパティをオーバーライドして、独自の実装を提供できます。

プロパティを使用する場合の2つの例外は、initでivarを設定する場合と、deallocでivarを解放する場合です。これは、これらのメソッドで誤ってサブクラスオーバーライドを使用することをほぼ確実に回避し、KVO通知をトリガーしたくないためです。

于 2011-01-07T16:46:06.133 に答える
0

の複製

そしておそらく、サイトの右上隅にある[検索]ボックスを使用して約15秒で見つけることができた他の約12個です。

于 2011-01-07T17:33:36.973 に答える