7
なぜivarを使うのですか?
私は通常、この質問が別の方法で尋ねられるのを見ます。たとえば、すべてのivarはプロパティである必要がありますか?(そして私はこのQに対するbbumの答えが好きです)。 私はコードでほとんど排他的にプロパティを使用しています。ただし、iOSで長い間開発を続けており、伝統的なゲームプログラマーである請負業者と一緒に仕事をすることがよくあります。ほとんど何もプロパティを宣言せず、ivarsに依存するコードを書いています。私は彼がこれを行うのは、1。)プロパティがObjective C 2.0(2007年10月)まで常に存在しなかったために慣れていることと、2。)ゲッター/セッターを通過しないことによる最小限のパフォーマンスの向上のためです。 彼はリークしないコードを書いていますが、私は彼にivarよりもプロパティを使用することを好みます。私達はそれについて話しました、そして彼は多かれ少なかれKVOを使っていなかったのでプロパティを使う理由がないと見ています、そして彼はメモリ問題の世話をした経験があります。 私の質問はもっと...なぜあなたはこれまでにivar期間を使いたいと思うでしょう-経験の有無にかかわらず。ivarの使用が正当化されるパフォーマンスの大きな違いは本当にありますか? また、明確にするために、必要に応じてセッターとゲッターをオーバーライドし、ゲッター/セッター内のそのプロパティと相関するivarを使用します。ただし、getter / setterまたはinit以外では、常にself.myProperty構文を使用します。 編集1 良い反応をありがとうございました。正しくないように思われる問題に対処したいのは、ivarを使用するとカプセル化が発生し、プロパティを使用しない場合です。クラスの継続でプロパティを定義するだけです。これにより、外部からプロパティが非表示になります。プロパティをインターフェースでreadonlyと宣言し、実装でreadwriteとして再定義することもできます: // readonly for outsiders @property (nonatomic, copy, readonly) NSString * name; そしてクラスの継続に持っています: // readwrite within this file @property (nonatomic, copy) NSString * name; 完全に「プライベート」にするには、クラスの継続で宣言するだけです。