ARC と最近のランタイム (@implementation ブロックで ivar を宣言できるほど最近のもの) を使用している場合、インスタンス変数は再び突然素晴らしいものになります。なんで?@properties とは異なり、それらはクラス固有であるためです。サブクラスによって誤ってオーバーライドされるリスクはありません。
それらを取得または設定するメソッドを呼び出さないため、単純なケースでも高速です。
私も個人的にはもっときれいだと思います。プライベートな @properties を定義するクラス拡張や、その不要なものはもうありません。素敵でシンプルなだけです。
したがって、私見による最善のアドバイスは、デフォルトでそれらを使用することです。実際にその機能が必要な場合にのみ @properties を使用してください。
- クラスの外からそれらにアクセスする方法が必要です。
- サブクラスがそれらをオーバーライドできるようにします。
- ゲッターまたはセッターは単なる代入ではありません。
後者の 2 つは、実際には皆さんが思っているよりもまれです。サブクラスでプロパティをオーバーライドしようとするのは一般的に賢明ではありません。
後で ivar を @property にアップグレードする必要があることがわかった場合、それは素晴らしく簡単です。アクセスできる唯一の場所は @implementation 内にあるため、通常は単純な検索と置換で "自己。" その参照に(そのように名前を付ける場合は、先頭のアンダースコアを削除するかもしれません)。それまでは、コストを支払う必要はなく、@properties を使用するリスクを冒す必要はありません。