0

コードの違いは何ですか:

[[self label] setText:@"Hello"];
[label setText:@"Hello"];

クラス内から呼び出しても基本的に同じということでよろしいでしょうか?したがって、別のクラスから呼び出すと、次のようになります。

[[someclass label] setText:@"Hello"];
someclass.label.text = @"Hello";

これは正しいです?この自己は私を混乱させています。

4

4 に答える 4

1

selfメソッドが呼び出されたオブジェクトへのポインタです。

[label setText:]おそらくインスタンス変数に直接アクセスします。他の方法はすべて、アクセサー メソッドを経由します。

于 2012-09-28T09:43:50.277 に答える
0

混乱は、@synthesizeデフォルトでプロパティと同じ名前のiVarを生成することに起因します。

[[self label] setText:@"Hello"];回線はプロパティにアクセスし、それlabelを呼び出しますsetText

[label setText:@"Hello"];iVarにアクセスし、それlabelを呼び出しますsetText

違いは、iVarを使用する場合、プロパティに設定した設定(アトミック、コピー、保持など)が尊重されないことです。

特別な理由がない場合は、通常、プロパティを使用することをお勧めします。を使用してiVarを別の名前で合成することにより、これを覚えやすくすることができます。

@synthesize label = _label;
于 2012-09-28T09:47:05.017 に答える
0

Self は、ラベルまたは取得したものが現在のクラスに属していることを示す唯一の方法です。self は、エンティティが宣言している、または値を割り当てているのと同じ現在のクラスに属していることを伝えます。

そして、そのラベルを他のクラスに割り当てるのは別のことです。

于 2012-09-28T09:45:11.523 に答える
0

はい、どちらも正しいです。の

someclass.label.text = @"Hello";

プロパティに直接アクセスしています

にいる間

[[someclass label] setText:@"Hello"];

セッターメソッドを使用して、Objective C によって作成された text プロパティの値を設定しています。

しかし、私は set メソッドの方が好きです。しかし、プロパティを使用することに問題はありません。

于 2012-09-28T09:44:13.223 に答える