3

重複の可能性:
ARCで@propertiesを使用する理由は何ですか?

NB:私は実際に私たちがプロパティを廃止できるとは思いませんが、私はなぜそうしないのかについての理由を理解しようとしています。:)

この質問に戻ると、プロパティを使用する主な理由は、メモリ管理の問題を回避するためのようです。つまり、プロパティを作成することで、これらすべての保持メソッドと解放メソッドを書き出す必要がなくなります。

- (void) setOtherObj:(MyOtherObject *)anOtherObject {

    if (otherObject == anOtherObject) {
    return;  
    }

    MyOtherObject *oldOtherObject = otherObject; // keep a reference to the old value for a second
    otherObject = [anOtherObject retain]; // put the new value in  
    [oldOtherObject release]; // let go of the old object
} 

ARCは現在これを処理しているので、プロパティをすべて一緒に廃止して、次のようなことでivarを設定することはできませんotherObject = anotherObjectか?

4

3 に答える 3

5

メモリ管理は、プロパティを使用する理由の 1ですが、唯一の理由ではありません。プレーンなインスタンス変数は、独自のクラス内でのみ使用できますが、外部からは使用できません。そのためには、まだプロパティが必要です。

プロパティは、インスタンス変数によってサポートされる必要さえありません。たとえば、プライベート サブビューbackgroundColorのプロパティを実際に返したり設定したりするプロパティがビューにあるとします。または、実際にはインスタンス変数に対応せず、単純に と を連結backgroundColorする readonlyプロパティがあるとします。namefirstNamelastName

単純なインスタンス変数アクセスの代わりにプロパティを使用すると、多くの場所でコードを変更することなく、遅延初期化をより簡単に実装できます。

プロパティを使用してメモリ管理を処理するだけであれば、多くの場合、プロパティを使用しなくても問題ありませんが、プロパティを使用すると、インスタンス変数に単純にマップする必要がないと後で判断した場合でも、より柔軟に対応できます。

于 2012-05-14T14:55:48.367 に答える
2

メモリの問題を回避することは、プロパティの非常に有用な副産物でした。それらの主な目的は、アクセス制御(readonlyvs. readwrite)と情報の隠蔽です(つまり、プロパティの取得と設定の背後にあるロジックは、クラスのユーザーに変更を加えることなくいつでも変更できます)。さらに、copyセマンティクスが必要な場合は、ARCで引き続き使用できます。

于 2012-05-14T14:55:41.667 に答える
0

ARC は、メモリ関連の問題を管理します。プロパティは、値を便利に取得/設定する方法です。したがって、ARC の登場はプロパティの終わりを意味するものではありません。

于 2012-05-14T15:02:01.630 に答える