2010年9月14日火曜日

@property

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

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


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

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


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


// hoge.h

NSString name_;
@property (nonatomic, retain) NSString name;



// hoge.m

@implementation Item
@synthesize name = name_;
@end;



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



- (NSString *)name {
return name_;
}

- (void)setName:(NSString *)name
{
if (name_ != name) {
[name_ release];
name_ = [name retain];
}
}



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


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

0 件のコメント:

コメントを投稿