有关自定义tableViewCells中内存泄漏的基本建议

时间:2014-03-06 16:12:53

标签: ios uitableview memory-leaks

我真的很难理解基于ARC的项目中自定义tableViewCell的内存泄漏,并希望有人能够揭示以下内容是否可能是负责任的,或者我是否正在咆哮错误的树完全。

所以,我正在将tableViewController推送到navigationController中,而在tableView中我有自己的自定义tableViewCells。

这个自定义tableViewCell有一个委托属性,它是从cellForRowAtIndexPath分配的,并指向tableViewController本身,换句话说就是......

cell.delegate = self;

此自定义tableViewCell还有几个NotificationCenter观察者。

现在,我已经放入代码来删除tableViewCell dealloc中的观察者,同样去添加...

self.delegate = Nil;

...只是发现dealloc似乎从未被调用过,即使在点击Back(即使用推送的tableViewContoller有效地完成导航堆栈)时也不会被调用。

所以,我想这归结为:细胞的这些方面中的任何一个都会导致泄漏吗?如果是这样,我是否会以正确的方式阻止泄漏?

编辑:我正在定义我的委托属性如下:

@property (nonatomic, retain) MyTableViewController *delegate;

2 个答案:

答案 0 :(得分:2)

您需要将自定义委托声明为weak

@property (nonatomic, weak) id<MyCustomDelegateProtocol> delegate;

否则你会得到一个强大的参考周期

controller -> table view -> cell -> controller

n.b。 weak特定于ARC,如果您不使用ARC,则需要使用assign,并确保在您成为其委托时自己将其取消。

答案 1 :(得分:1)

另一个问题可能就是这个问题:

iOS 7.0 and ARC: UITableView never deallocated after rows animation

如果您在iOS 7.0.3 +上运行,则不适用。