6

Apple OS X 10.8 Core Library Documentation の Programming with Objective-C の下には、次のように記載されています。

「値または別のオブジェクトを追跡する必要があるときはいつでも、オブジェクトでプロパティを使用することをお勧めします。プロパティを宣言せずに独自のインスタンス変数を定義する必要がある場合は、それらをクラス インターフェイスまたは実装...」

では、プロパティを宣言せずにインスタンス変数を定義する必要があるのはどのような場合でしょうか? アップルが言っていることは別として、それは本当に個人的な好みの問題なのでしょうか?

ありがとう!

4

3 に答える 3

2

一部は間違いなく好みの問題ですが、すべてではありません。外部からの可視性を持つアイテムや、クラスの内部と外部で異なるアクセス制御が必要なアイテムのプロパティを使用した方がよいでしょう。ARC の導入以来、この問題はあまり目立たなくなりました。それ以前は、retain と release の自動呼び出しにプロパティを使用したかったからです。プロパティのこの側面の重要性は、オブジェクトをプロパティに自動的にコピーする必要がある場合に大幅に減少しました。

于 2012-12-24T00:28:42.857 に答える
1

ARC と最近のランタイム (@implementation ブロックで ivar を宣言できるほど最近のもの) を使用している場合、インスタンス変数は再び突然素晴らしいものになりますなんで?@properties とは異なり、それらはクラス固有であるためです。サブクラスによって誤ってオーバーライドされるリスクはありません。

それらを取得または設定するメソッドを呼び出さないため、単純なケースでも高速です。

私も個人的にはもっときれいだと思います。プライベートな @properties を定義するクラス拡張や、その不要なものはもうありません。素敵でシンプルなだけです。

したがって、私見による最善のアドバイスは、デフォルトでそれらを使用することです。実際にその機能が必要な場合にのみ @properties を使用してください。

  • クラスの外からそれらにアクセスする方法が必要です。
  • サブクラスがそれらをオーバーライドできるようにします。
  • ゲッターまたはセッターは単なる代入ではありません。

後者の 2 つは、実際には皆さんが思っているよりもまれです。サブクラスでプロパティをオーバーライドしようとするのは一般的に賢明ではありません。

後で ivar を @property にアップグレードする必要があることがわかった場合、それは素晴らしく簡単です。アクセスできる唯一の場所は @implementation 内にあるため、通常は単純な検索と置換で "自己。" その参照に(そのように名前を付ける場合は、先頭のアンダースコアを削除するかもしれません)。それまでは、コストを支払う必要はなく、@properties を使用するリスクを冒す必要はありません。

于 2012-12-24T02:12:45.627 に答える
0

セッター/ゲッターを定義でき、その構文が好きなので、プロパティを好みます。
多くの人々は、この記事のように ivar を使用することは悪い習慣であると断言しています :
http://cocoasamurai.blogspot.it/2012/08/cover-up-those-ivars.html
客観的な理由がなくても、好きではありません。
ivar を宣言しても @private ディレクティブを使用できるので、変数を公開するかどうかは問題ではありません。より多くの ivar が必要な場合は、それらを使用する必要があると思います。

于 2012-12-24T00:34:24.227 に答える