Objective-Cのプロパティで時々はまるので、メモ。(詳解 Objective-C 2.0 P.295)
プロパティに代入をすると、オプションに応じて実際は内部ではこのようなことが行われている。
しかしこれはあくまで概念で、このままのコードがどこかに生成されているわけではないらしい。なので、この内部にブレークポイントを張ったりはできない。
@propertyのオプションが assign だった場合
-(void)setName:(TYPE)obj {
name = obj;
}
@propertyのオプションが retain だった場合
-(void)setName:(TYPE)obj {
if(name != obj) {
[name release];
name = [obj retain];
}
}
@propertyのオプションが copy だった場合
-(void)setName:(TYPE)obj {
if(name != obj) {
[name release];
name = [obj copy];
}
}
Objective-C では、nil にメッセージを送っても何も起きない(落ちたりしない)ので、name が nil だった場合 nil に release が送られてしまうが、問題がない。(詳解Objective-C 2.0 P.62)
| 詳解 Objective-C 2.0 | |
![]() |
荻原 剛志
ソフトバンククリエイティブ 2008-05-28 おすすめ平均 |


説明が下手だと思う。
iPhoneアプリ開発で初めてObjective-C触る人に勧めたい