1

変数を使用する利点はありますか? または、変数の代わりにプロパティを使用しても問題ありませんか?

4

2 に答える 2

2

多くの場合、インスタンス変数の代わりにプロパティを使用しても問題ないだけでなく、多くの場合、それが好まれます。

ARC が登場するまで、プロパティ (または一般的にはアクセサー) の重要な側面の 1 つは、オブジェクトを保持または解放する必要がある場所の数を減らすことでメモリ管理を簡素化することでした。ARC ができた今ではそれほど重要ではありませんが、ほぼすべての場所で ivar よりもプロパティを選択する人がいる理由についての背景を説明しています。プロパティを選択するその他の理由には、キー値の観察、オブジェクトの状態にアクセスするための一貫した構文、属性のセマンティクスを簡潔に記述する方法、およびカプセル化による将来の保証が含まれます。

アクセサー関数は、オブジェクトの内部動作を公開することでカプセル化を破るという考えがあります。これが、多くの場合、プロパティではなく ivar を使用することを選択する理由だと思います。ただし、私は同意しません。プロパティをクラス拡張でいつでも非表示にして、クラスからのみ見えるようにすることができます。いずれにせよ、アクセサーを使用すると、同じインターフェイスを提供しながら実装を変更できます。いずれにせよ、クラスのユーザーが特定の属性に依存したくない場合は、それを ivar にするか、クラス拡張で宣言されたプロパティにすることができます。

ivar のもう 1 つの引数は速度です。変数を直接使用すると、アクセサ メソッドの呼び出しが回避されます。IMO、プロパティの他の利点は、一般的に速度の利点を大幅に上回ります。アクセサー呼び出しが実際の問題である特定のケースがある場合、通常、プロパティを回避するよりも問題を解決するためのより良い方法があります。

于 2013-08-08T16:03:12.583 に答える
0

デフォルトでは、すべてのプロパティがインスタンス変数になるため、この質問はちょっと奇妙です。したがって、プロパティよりも ivar だけを使用してもメリットはありません。

どちらかといえば、プロパティには ivar よりも多くの利点があります。プロパティは、カプセル化、メモリ管理 (主に MRC を使用する場合に関連)、および KVO を提供します。

プロパティに対して単純な ivar を使用する唯一の利点は、わずかな効率です。ivar に直接アクセスすると、プロパティ (実際にはメソッド呼び出し) にアクセスするよりもオーバーヘッドが少なくなります。ただし、パフォーマンスの問題を測定していない限り、プロパティの利点はこれを上回ります。

ここでより重要な問題は、すべてのプロパティを公開したかどうかです。.h ファイルには、パブリック プロパティ (他のクラスで必要なプロパティ) とパブリック メソッドの宣言のみをリストする必要があります。それ以外はすべて、.m ファイルで非公開にする必要があります。.m ファイルのクラス拡張ですべてのプライベート プロパティを宣言します。

于 2013-08-08T15:53:26.273 に答える