コードの違いは何ですか:
[[self label] setText:@"Hello"];
[label setText:@"Hello"];
クラス内から呼び出しても基本的に同じということでよろしいでしょうか?したがって、別のクラスから呼び出すと、次のようになります。
[[someclass label] setText:@"Hello"];
someclass.label.text = @"Hello";
これは正しいです?この自己は私を混乱させています。
コードの違いは何ですか:
[[self label] setText:@"Hello"];
[label setText:@"Hello"];
クラス内から呼び出しても基本的に同じということでよろしいでしょうか?したがって、別のクラスから呼び出すと、次のようになります。
[[someclass label] setText:@"Hello"];
someclass.label.text = @"Hello";
これは正しいです?この自己は私を混乱させています。
self
メソッドが呼び出されたオブジェクトへのポインタです。
[label setText:]
おそらくインスタンス変数に直接アクセスします。他の方法はすべて、アクセサー メソッドを経由します。
混乱は、@synthesize
デフォルトでプロパティと同じ名前のiVarを生成することに起因します。
[[self label] setText:@"Hello"];
回線はプロパティにアクセスし、それlabel
を呼び出しますsetText
。
は[label setText:@"Hello"];
iVarにアクセスし、それlabel
を呼び出しますsetText
。
違いは、iVarを使用する場合、プロパティに設定した設定(アトミック、コピー、保持など)が尊重されないことです。
特別な理由がない場合は、通常、プロパティを使用することをお勧めします。を使用してiVarを別の名前で合成することにより、これを覚えやすくすることができます。
@synthesize label = _label;
Self は、ラベルまたは取得したものが現在のクラスに属していることを示す唯一の方法です。self は、エンティティが宣言している、または値を割り当てているのと同じ現在のクラスに属していることを伝えます。
そして、そのラベルを他のクラスに割り当てるのは別のことです。
はい、どちらも正しいです。の
someclass.label.text = @"Hello";
プロパティに直接アクセスしています
にいる間
[[someclass label] setText:@"Hello"];
セッターメソッドを使用して、Objective C によって作成された text プロパティの値を設定しています。
しかし、私は set メソッドの方が好きです。しかし、プロパティを使用することに問題はありません。