【发布时间】:2014-04-09 09:49:04
【问题描述】:
我真的很难理解来自基于 ARC 的项目中自定义 tableViewCell 的内存泄漏,并希望有人能够阐明以下是否可能是负责任的,或者我是否在吠叫错误的树完全。
所以,我将 tableViewController 推送到 navigationController 中,并且在 tableView 中我有自己的自定义 tableViewCells。
这个自定义 tableViewCell 有一个 delegate 属性,该属性是从 cellForRowAtIndexPath 分配的,并指向 tableViewController 本身,换句话说...
cell.delegate = self;
这个自定义的 tableViewCell 也有几个 NotificationCenter 的观察者。
现在,我已经在 tableViewCell dealloc 中添加了删除观察者的代码,并同样去添加...
self.delegate = Nil;
...只是发现似乎从未调用 dealloc,即使在点击返回时(即返回导航堆栈有效地完成推送的 tableViewContoller)。
所以,我想这可以归结为:细胞的这些方面是否会导致泄漏?如果是这样,我是否会以正确的方式阻止泄漏?
编辑:我将我的委托属性定义如下:
@property (nonatomic, retain) MyTableViewController *delegate;
【问题讨论】:
-
使用仪器来找出您正在泄漏(或过度保留)的内容以及来自何处。是否保留了代表(通常不应该保留)。当表格视图告诉它不再显示单元格时,表格视图控制器应该自行移除。
-
了解如何在自定义单元格视图中定义委托 iVar 可能会有所帮助。但是,请注意,出于性能原因,
UITableViewCell可以被回收(通过initWithStyle:reuseIdentifier:和dequeueReusableCellWithIdentifier:)。如果表格单元格是可重用的,那么在表格视图消失之前,您可能看不到对象上的立即解除分配。 -
好点 - 添加了我的 iVar 定义。
标签: ios uitableview memory-leaks