(私の英語で申し訳ありません:-) カスタム UITableViewCell を読み込んでいます:
static NSString *CellIdentifier = @"ReminderCell";
ReminderCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSLog(@"Alloco nuova cella");
NSArray *objectsInNib = [[NSBundle mainBundle] loadNibNamed:@"ReminderCell" owner:nil options:nil];
for(id currentObject in objectsInNib)
{
if([currentObject isKindOfClass:[ReminderCell class]])
{
cell = (ReminderCell *)currentObject;
break;
}
}
} //fine caricamento cella dal Nib
return cell;
このセルには .m と .h があり、UITableViewController ではなく、独自のファイル内にアウトレットを配置したいので、所有者を nil に設定しています。正常に動作しています。
私の質問は、この状況での正しいメモリ管理についてです。
loadNibNamed が自動解放された配列を返すことを理解しています。さらに、現在のループの最後に自動解放プールが空になることを理解しています。このため、カスタム セルを返却する前に保持する必要はありません。
しかし、自動解放されたオブジェクトは、自動解放が送信されたメソッドの最後までのみ存続することが保証されていると想定すべきだと何度も聞いたことがあります。これを前提として、セルをすぐに保持してから自動解放する必要があります。
cell = [[(ReminderCell *)currentObject] retain];
//code...
[cell autorelease];
return cell;
これは正しいですか、それとも心配する必要はありませんか? ありがとう