我正在编写我的第一个iPhone应用程序(因EXC BAD ACCESS错误而崩溃)。
我已经阅读了其他一些类似的答案,但仍然没有清楚了解如何修复我的代码。
有人可以帮助修复此代码段中UITableViewCell *单元格对象的内存管理:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:kCityCellReuseID];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCityCellReuseID];
cell.selectionStyle = UITableViewCellSelectionStyleBlue;
cell.textLabel.text = [[self.myData objectAtIndex:indexPath.section] valueForKey:kDisplayText];
[cell release];
}
return cell;
}
答案 0 :(得分:4)
您必须致电[cell autorelease]
而不是[cell release]
。当你在那里释放单元格时,它会在你将它返回到表格视图之前立即被释放,并且表格视图可以取得它的所有权(即保留它)。
如果您自动释放单元格,则表示您放弃了对象的所有权(这是正确的事情,因为您使用alloc
创建了它),但在自动释放之前它不会被释放游泳池到达它。到那时,表视图将保留单元格。
如果你没有自动释放单元格(即如果你删除了释放行),程序就不会崩溃,但每次创建新单元格时都会泄漏内存。
答案 1 :(得分:0)
您的应用程序崩溃,因为您正在返回已在函数内释放的对象。您可以代替在函数中释放它,将所有权传递给函数的调用者。然后是调用者在完成对象时释放对象。