iPhone应用程序使用越来越多的内存

时间:2011-10-26 22:24:48

标签: objective-c

更新

解决了这个问题并且有一个循环保留。

原始问题

配置文件显示零内存泄漏,但随着时间的推移,应用程序使用了越来越多的内存。

让我们只看一下应用程序中的一个内容,并详细了解一下。有一个表视图 - 让我们把它称为主表,当点击它的任何一个单元格时,它会引导你进入第二个表格视图,第二个表格上有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方法。

1 个答案:

答案 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。

祝你好运!