更新
解决了这个问题并且有一个循环保留。
原始问题
配置文件显示零内存泄漏,但随着时间的推移,应用程序使用了越来越多的内存。
让我们只看一下应用程序中的一个内容,并详细了解一下。有一个表视图 - 让我们把它称为主表,当点击它的任何一个单元格时,它会引导你进入第二个表格视图,第二个表格上有10到20个图像。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
FlyerListTable *detail = [[FlyerListTable alloc] initWithNibName:@"FlyerListTable" bundle:nil];
detail.department = [categories objectAtIndex: indexPath.row];
detail.promotions = [items valueForKey:detail.department];
[self.navigationController pushViewController:detail animated:NO];
[detail release];
}
FlyerListTable是第二个表的类,它有dealloc定义,但是我跟踪它并且从未调用过dealloc方法。
答案 0 :(得分:1)
什么是惯例或最佳做法?
我建议你让它加载延迟:
- (FlyerListTable*)flyerListTable
{
if (_flyerListTable == nil)
_flyerListTable = [[FlyerListTable alloc] initWithNibName:@"FlyerListTable" bundle:nil];
return _flyerListTable;
}
不要忘记以dealloc发布它。
然后在选择行时使用它
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
FlyerListTable* detail = [self flyerListTable];
detail.department = [categories objectAtIndex: indexPath.row];
detail.promotions = [items valueForKey:detail.department];
[self.navigationController pushViewController:detail animated:NO];
}
当我跟踪它时,从未调用此dealloc方法。
如果在您的示例中未调用dealloc,则意味着其他一些对象保留了它。在进行任何更改之前,请尝试找出可能保留的对象。您可以为此目的覆盖retain方法:
- (id)retain
{
return [super retain];
}
设置断点以查看调用堆栈。你当然不应该使用ARC。
祝你好运!