なぜiPhoneアプリのメモリ管理が面倒くさいか?なぜGCが便利化? ちょっとずつわかってきたような気がするこの頃。
Objective-Cを始めた頃は、どうしても「おまじない」で物事が進んでしまいます。 (ある意味仕方がないのですが) 2010/05/04 Objective-C 基礎編 Vol2
周知だとは思いますが、iOSにはガベージコレクションが使えない為、
リファレンスカウンタ方式
つまり、デバッグツールやretainCountでちゃんと確認しておかないと、 いずれはメモリリークしてしまいます。
retain、copy、assign
この使い分けがわからないので、初めは「おまじない」でコーディングしてしまいがち。
@property (nonatomic, retain) NSString *name;
みたいに、参考書どおりに宣言することがほとんどになるかと思います。
まずは、Nosue's log iPhoneプログラミング講義のフォローアップ資料の翻訳2 に基本的な使い分けが記載されて、わかりやすいかと思います。
(1) オブジェクトでない場合、指定しないかassignを指定 ※delegateはassign (2) copy オブジェクトの場合、assign、retain、copyのいずれかで指定。 (3) @propertyでretain, copy指定すると、各setter, getterの実装が不要 ※指定しない場合はassignがデフォルトとなり、プリミティブ型はassignにする ※逆にオブジェクト作成時にretain、copyを指定するとretainCountが増加する (4) オブジェクトが同時に使用される可能性がある場合は、無難にnonatomicにしておく。 ※通常は、nonatomic
---2011/05/09 追記 2011-02-20 [iPhone] メモリ管理 の記事も読んでおくとよいかも。