【问题标题】:iPhone: custom UITableViewCell with Interface Builder -> how to release cell objects?iPhone:使用 Interface Builder 自定义 UITableViewCell -> 如何释放单元格对象?
【发布时间】:2011-02-13 12:02:57
【问题描述】:

official documentation 告诉我必须做这 3 件事才能正确管理“笔尖对象”的内存。

@property (nonatomic, retain) IBOutlet UIUserInterfaceElementClass *anOutlet;

“然后你要么合成相应的访问器方法,要么根据声明实现它们,并(在iPhone OS中)释放dealloc中的相应变量。”

- (void)viewDidUnload {
    self.anOutlet = nil;
    [super viewDidUnload];
}

这对于普通视图来说是有意义的。但是,对于通过 .nib 文件加载自定义 UITableViewCells 的 UITableView,我该怎么做?

IBOutlets 在 MyCustomCell.h 中(继承自 UITableViewCell),但这不是我加载 nib 并将其应用于单元格实例的地方,因为这发生在 MyTableView.m 中

那么我还是要在 MyCustomCell.m 的 dealloc 中释放 IBOutlets 还是必须在 MyTableView.m 中做点什么?

MyCustomCell.m 也没有 - (void)viewDidUnload {},我可以将 IBOutlets 设置为零,而 MyTableView.m 有。

【问题讨论】:

    标签: iphone memory-management uitableview iboutlet


    【解决方案1】:

    你的 IBOutlets 是单元格的属性吗?如果是,则在 MyCustomCell 的 dealloc 方法中释放它们。

    确保您遵循 tableViews 指南并在 tableview:cellForRowAtIndex 中调用 dequeueReusableCellWithIdentifier:。 tableView 将在不再需要时释放您的自定义单元格。假设您没有任何其他对您的单元格的引用(您不应该),那么将为 tableView 出列的单元格调用 dealloc。

    【讨论】:

    • 感谢您的回答。这几乎就是我所做的。我唯一仍然缺少的是我设置 IBOutlet = nil 的部分,这在文档中描述为在 (void) viewDidUnload{} 内执行,但我的自定义 UITableViewCell 没有。跨度>
    • 可以使用'[object release], object = nil;'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2023-01-16
    相关资源
    最近更新 更多