2010年9月14日火曜日

@property

プロパティとインスタンス変数って別物っぽい。プロパティって何?よくわからないので宣言プロパティ(@property)の特徴だけ調べた。

宣言プロパティ(@property)でインスタンス変数を指定すると。@synthesizeで定型的なアクセサメソッドを生成できる。それと、アクセサメソッドをドット演算子を使って呼び出せる。


インスタンス変数を直接操作していい場合って?よくわからん。

メソッド内でのselfの使用は?
メソッド内で、そのインスタンス自身のアクセサを利用するためにselfに対してドット演算子を適用できる。でもアクセサメソッド内では使わないこと、使うと再帰呼び出しとなり停止しなくなる。


例えば、@propertyでretainを指定の場合

  1. // hoge.h  
  2.   
  3. NSString name_;  
  4. @property (nonatomic, retain) NSString name;  

  1. // hoge.m  
  2.   
  3. @implementation Item  
  4. @synthesize name = name_;  
  5. @end;  


って感じで、
@synthesizeを指定することにより以下のアクセサメソッド(セッタとゲッタ)は自分で書かなくてもよいこととなる。

  1. - (NSString *)name {  
  2.   return name_;  
  3. }  
  4.   
  5. - (void)setName:(NSString *)name  
  6. {  
  7.   if (name_ != name) {  
  8.      [name_ release];  
  9.      name_ = [name retain];  
  10.   }  
  11. }  


超参考になる
http://iphone.longearth.net/2009/01/22/【objective-c】nsdate-dateでセットした変数が参照できずエラー/
http://iphone-dev.g.hatena.ne.jp/tokorom/20090706/1246890179

  1. // おまけ:retainカウントの取り方  
  2. [obj retainCount]  

0 件のコメント:

コメントを投稿