2012-02-20 19 views
4

質問は基本的ですが、私はIOSプログラミングを進めていくことが非常に重要であることがわかりました。時にはインスタンス変数のみを宣言していて、関連するプロパティを設定していないこともあります。いくつかのプロパティを宣言し、合成を使用して値を取得または設定するものがあります。コンパイルによって警告が表示されるときに、両方のコードを宣言する必要がある場合があります。 Objective Cでのプロパティの操作の基本は何ですか?私はインスタンス変数のゲッターとセッターを作成する基本的な要件を知っていますが、いつですか? 私は何度もプロパティを使用しないことを何度も見てきましたが、その後も変数の値を簡単に設定して取得しています。また、原子、非原子、強、保持のような種類のプロパティは、私には非常に不明です。 4.2へのXCODEのアップグラデーションは、メモリ管理に関する私の考えを揺さぶっています。誰かが私の心の上に雲をクリアすることができますか?目的C:@property宣言とインスタンス変数の宣言

+0

http://www.raywenderlich.com/tutorialsこのサイトで素晴らしいチュートリアルをチェックしてください。このサイトから多くの概念を学びました。 – Aaron

+0

ありがとうAaron ... –

答えて

9

プロパティは、主に次の理由により、常に直接IVARのアクセスよりも望ましい方法です。

  • あなたはサブクラスにゲッターやセッターをオーバーライドすることができ
  • あなたが「割り当て振る舞い」を定義することができます(つまりcopy
  • あなたはIVARアクセス

キーワードを同期させることができ、assignretain/strongweak):

  • copy
  • assignを設定するときに、オブジェクトはIVARにコピーされる:
  • retain/strongを設定するときに、オブジェクトのポインタはIVARに割り当てられている:オブジェクトが設定
  • weak上に保持されている:ARCでこれは割り当てと似ていますが、インスタンスが割り当て解除されたときに自動的にnilに設定され、ガベージコレクション環境でも使用されます。
  • nonatomicは:アクセサは@synchronized(スレッドセーフ)、したがって、より速く
  • atomicではありません:アクセサは@synchronized(スレッドセーフ)であるので、遅く

は、一般的に、あなたは常にIVARを合成する必要があります。パフォーマンス上の理由からより速いアクセスが必要な場合は、合成されたivarにいつでもアクセスできます。

+0

すべてのキーワードの小さな定義は本当に役に立ちます...ありがとう..:) –

+0

これが彼の答えの隣のチェックマーク(ダニ) – zenopolis

2

タイピング中に、「Erik Aigner」がすばらしい答えでより速くなることがわかりました。性質上EENの例えば

、合成およびカスタムセッタースタック上の私の答えを参照してください。 Objective-C convention to prevent "local declaration hides instance variable" warning

ARCのステーターのチュートリアルについてはレイのexplenationは彼のウェブサイトをwenderlich参照してください。

Beginning ARC in iOS 5 part 1

Beginning ARC in iOS 5 part 2

+0

をクリックしてErikに報酬を与えるのに役立つなら、これは私が探しているものです.thanks Juzz –