Objective-Cクラスで使用する場合self.var
と使用する場合の違いは何ですか?var
どちらか一方にメリットや危険性はありますか?
3 に答える
self.var
のプロパティを呼び出しますvar
。舞台裏では、Objective-Cはプロパティのゲッターを自動的に生成します(または、傾斜している場合は自分で作成できます)。そのため、self.var
そのゲッターを使用します。プレーンvar
はインスタンス変数に直接アクセスします(つまり、値を取得するためにゲッターを通過しません)。
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通知をトリガーしたくないためです。
の複製
- Objective-Cで明示的な@propertyがないと、ドット構文はどのように機能しますか?
- self.variableと変数の違い
- obj-cアクセサーを使用することとドット構文を使用することの違いは何ですか?
- iVars、自己の有無は?
- 「自己」は必要ですか?
そしておそらく、サイトの右上隅にある[検索]ボックスを使用して約15秒で見つけることができた他の約12個です。