viewDidUnloadとdeallocでメモリ解放の記述を行うが、使い分けは次のようにする。
foo.h
@interface ViewController : UITableViewController
{
IBOutlet UIButton *hogeButton;
NSArray *hogeArray;
}
@property (nonatomic, retain, readonly)IBOutlet UIButton *hogeButton;
@property (nonatomic, retain) NSArray *hogeArray;
@end
foo.m
- (void)dealloc
{
[hogeButton release], hogeButton = nil; // IBOutletで接続したオブジェクト
[hogeArray release];
[super dealloc];
}
- (void)viewDidUnload
{
[super viewDidUnload];
[hogeButton release], hogeButton = nil; // IBOutletで接続したオブジェクト
self.hogeArray = nil;
}
ポイントは、ヘッダファイルのプロパティ定義で"readonly"と定義したオブジェクトは、viewDidUnloadで
self.objectName = nil;としてはならない。オブジェクトのreleaseとオブジェクトへのnilの直接代入は以下のように個別に行う。
[objectName release];
objectName = nil;
逆に”readonly"ではないオブジェクトは、viewDidUnloadで
self.objectName = nil;としてよい。
また、Nibから生成されるオブジェクト(IBOutletで接続したオブジェクト)は、deallocにおいてrelease後に、オブジェクトにnilを代入する。
[objectName release];
objectName = nil;
Tips:
・self.objectNameは、プロパティアクセス。
・objectName、または、self->objectNameは、インスタンス変数への直接アクセス。
■詳細はサンプルコード UICatalogとiPhone OS View Controllerプログラミング ガイト、Memory Management of Nib Objectsを参照。
■参考記事
http://cocoadays.blogspot.com/2010/07/uiviewcontroller.html
http://yuuen.syoyu.net/Entry/59/
http://yuuen.syoyu.net/Entry/66/
【メモリ管理の最新記事】