初心者の落とし穴 retainとrelease

2011/02/07

なぜiPhoneアプリのメモリ管理が面倒くさいか?なぜGCが便利化? ちょっとずつわかってきたような気がするこの頃。

Objective-Cを始めた頃は、どうしても「おまじない」で物事が進んでしまいます。 (ある意味仕方がないのですが) 2010/05/04 Objective-C 基礎編 Vol2

周知だとは思いますが、iOSにはガベージコレクションが使えない為、

リファレンスカウンタ方式

つまり、デバッグツールやretainCountでちゃんと確認しておかないと、 いずれはメモリリークしてしまいます。

プロパティ管理の定石

この使い分けがわからないので、初めは「おまじない」でコーディングしてしまいがち。

@property (nonatomic, retain) NSString *name;

みたいに、参考書どおりに宣言することがほとんどになるかと思います。

まずは、Nosue's log iPhoneプログラミング講義のフォローアップ資料の翻訳2 に基本的な使い分けが記載されて、わかりやすいかと思います。

assign, retain ,copyのまとめ

(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] メモリ管理 の記事も読んでおくとよいかも。