【问题标题】:Placing elements into the UITableView footer, when to release them?将元素放入 UITableView 页脚,何时释放它们?
【发布时间】:2009-07-11 14:49:35
【问题描述】:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    AViewController * aView = [[AViewController alloc] initWithNibName:@"myNib" bundle:[NSBundle mainBundle]];    
    return vintagePriceRowView.view;
}

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

Leaks 工具实际上并没有显示泄漏,但显然 Clang 不喜欢上面的代码。我知道 Clang 在确定代码中可能出现的所有错误方面并不是福音,但在这种情况下,它感觉可能是正确的。我已经分配了,我需要释放它。

关于我做错了什么有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

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

    然后在您的 viewForFooter 方法中简单地返回您之前存储的视图。

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

    【讨论】:

      【解决方案2】:

      你需要坚持到它不再需要为止。

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

      一旦你将它分配给私有属性,你当然需要releaseautorelease,因为setter 会为你保留它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-13
        • 2013-04-25
        相关资源
        最近更新 更多