deleteRowsAtIndexPaths:滑动以删除行,从不解除分配单元格



我想知道我是否偶然发现了一个错误,即滑动删除UITableViewCells永远不会解除分配,而他们的UITableViewController会解除分配。

我在我的自定义表单元格中添加了一个-delloc方法,它会注销一条消息。当我按下导航控制器时,所有6条信息都会被注销。

如果我滑动删除一个(或多个),然后按返回键,则只记录了5个。因此,我注销了已删除单元格的指针地址,以备将来参考。现在,当我返回并在任何时候暂停执行时,我可以输入lldb提示符:

po 140382950334240
<TableLeakCell: 0x7fe67852a490; baseClass = UITableViewCell; frame = (-375 176; 375 44); text = 'Chris'; hidden = YES; autoresize = W; gestureRecognizers = <NSArray: 0x7fe678530d70>; layer = <CALayer: 0x7fe67852a860>>

这应该被解除分配!细胞的x.position恰好是-(tableView.width)hidden=YES。如在动画完成后,单元仍处于该位置。或者它正在排队等待重用?无论哪种方式,它都会永远存在,而且苹果的文档中没有任何关于在调用deleteRowsAtIndexPaths后必须手动销毁单元格的内容。

这里的概念快速验证项目:https://github.com/iOSDigital/UITableViewLeak

至少使用Xcode 7.2/iOS 9.2 SimulatorXcode 7.3/iOS 9.3 Device,所有单元格都会被释放。唯一的变化是解除分配的顺序,删除的单元格将最后解除分配。

最新更新