我真的很难理解基于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;
答案 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 +上运行,则不适用。