0

プロパティ名とプロパティの保管場所の違いは何ですか? プロパティ名のみを使用する必要があります。最初または 2 番目に使用するポイントは何ですか? これが私の例です:

@implementation Car
@synthesize carSpeed = _carSpeed;


-(void) someMethod:(double)speed
{
    self.carSpeed = speed; // this is the same am I right?
    _carSpeed = speed;

}


@end
4

2 に答える 2

2

インスタンス変数(保存場所)に直接アクセスする場合、他のコードにこの変更を通知して、これに対して何かを行う方法はありません。プロパティの使用(ドット構文の使用)は、セッターに送信されるメッセージにすぎません。

self.carSpeed = speed;

とまったく同じです

[self setCarSpeed: speed];

これにより自動KVOが機能するようになると、このプロパティのオブザーバーに変更が通知されます。

また、これは通常のメッセージ送信であるため、通常のメッセージディスパッチが発生します。したがって、サブクラスのセッターをオーバーライドして、その動作を変更できます。または、getterとsetterの実装を変更して、そのプロパティ値を変更または読み取る必要のあるコードを変更することなく、インスタンス変数の代わりに他の種類のストレージを値に使用することができます。

ARCを使用する前は、アクセサーをどこでも使用するもう1つの重要な理由は、それらがメモリ管理を処理することになっていることでした。

于 2013-03-09T13:01:37.653 に答える
1
self.carSpeed = speed; 

これはセッターメソッドを使用します

一方、

_carSpeed = speed;

作成されたエイリアスを介して ivar またはプロパティを直接使用します。


を使用しています。表記法により、クラス外からそれらにアクセスする機能が提供され、セッターとゲッターは公開ゾーンにあります。

一方、_carSpeed はクラスに対してローカルにします。さらに、それは古い慣習です。

アンダースコア プレフィックス付きの合成されたプロパティと変数: これはどういう意味ですか?

于 2013-03-09T12:53:58.023 に答える