私はdealloc()メソッドとviewDidUnload()メソッドについて簡単に質問しています。私は多くのコード例に気付き、人々はさまざまなことをするようです。iPhone deallocとviewDidUnload問題
また、ARCはオプションではないと付け加えます。
(1)IBOutletsを含むdealloc()メソッドですべてのプロパティをnilに設定する必要があります。たとえば、インスタンス変数[_myArrary release]を解放し、self.myArrary = nilを設定する必要があります。
(2)viewDidUnloadでは、すべてのIBOutletをnilに設定する必要があります。また、viewDidLoadで作成されたものもすべて設定する必要があります。しかし、myStringについては、viewDidLoadが呼び出された後、別のメソッドで初期化されています。私はそれを無しにするべきですか?
私はそのように宣言いくつかのプロパティを持っている場合:
@property (nonatomic, retain) IBOutlet UITableViewCell *myTableCell;
@property (nonatomic, retain) IBOutlet UILabel *myLabel;
@property (nonatomic, retain) NSArray *myArrary;
@property (nonatomic, retain) NSString *myString;
I synthesize them as such:
@synthesize myArrary = _myArrary;
@synthesize myTableCell;
@synthesize myLabel;
@synthesize myString;
- (void)viewDidLoad
{
[super viewDidLoad];
_myArrary = [NSArrary alloc] initWithObjects:@"testObject", nil];
}
- (void)viewDidUnload
{
self.myArrary = nil;
self.myTableCell = nil;
self.myLabel = nil;
[super viewDidUnload];
}
- (void)dealloc
{
[_myArray release];
[super dealloc];
}
myTableCell、myLabel、およびmyStringはインスタンス変数を持たないプロパティで、[myTableCell release]と言うことはできません。[self.myTableCell release]が間違っていることがわかりました。 – Vikings
実際、 '[myTableCell release]'は正しいです。これらのイナールは暗黙のうちに作成されます。 –
これらを使用しているコンパイラのバージョンによっては、すべて有効である可能性があります。 @synthesizeはあなたのためにivarを作成します - あなたは 'myArray' ivarの名前を' _myArray'に変更しましたが、他のプロパティの名前はivarsと同じです。さらに、あなたが 'dealloc'にいるなら、あなたはマルチスレッドでない限り' [self.myTableCell release] 'で逃げることができます...しかし、これは複雑すぎます - 今のところsetterとgetterを使用してください以前に説明したように、メモリ管理ガイドラインを徹底的に読んでください...またはARCを使用してください。これはiOS4デバイスでも利用可能です。 – ikuramedia