将元素放入UITableView页脚,何时释放它们?

时间:2009-07-11 14:49:36

标签: objective-c cocoa-touch memory-management

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    AViewController * aView = [[AViewController alloc] initWithNibName:@"myNib" bundle:[NSBundle mainBundle]];    
    return vintagePriceRowView.view;
}

我知道这段代码需要在某个地方发布。但是哪里?如果我将分配的AviewController设置为autorelease,那么触摸视图中的元素会导致“消息发送到解除分配的实例0xfb5780”

Leaks仪器实际上没有泄漏,但显然Clang不喜欢上面的代码。我知道Clang不是福音,只要确定代码中可能出错的一切,但在这种情况下,感觉就像它可能是正确的一样。我已经分配了它,我需要释放它。

关于我做错的任何想法?

2 个答案:

答案 0 :(得分:2)

为了提高效率,您应该在需要之前创建将在页脚中使用的视图。也许在tableViewController中的viewDidLoad中创建它并将其存储在成员变量中。

然后在viewForFooter方法中,只返回先前存储的视图。

然后在tableViewController的dealloc方法中,释放视图。

答案 1 :(得分:1)

你需要坚持下去,直到不再需要它为止。

我建议创建一个私有属性,最初将其设置为nil,然后延迟加载nib并将返回的视图分配给属性。然后在deallocviewDidUnload中,只需通过设置器将其设置为nil

当您将其分配给私人财产时,您当然需要releaseautorelease,因为设置者会为您保留它。