2015-12-03 50 views
8

我想知道如果我以某种方式偶然发现刷卡删除的错误UITableViewCells永远不会释放他们的UITableViewControllerdeleteRowsAtIndexPaths:通过滑动删除行不会释放单元格?

我在我的自定义表格单元格中添加了一个-dealloc方法,它将注销消息。当我按下导航控制器时,所有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。因为在动画结束后单元格仍处于位置。或者也许它正在排队等待重用?无论哪种方式,它永远都在那里,Apple的文档中没有任何关于在调用deleteRowsAtIndexPaths之后手动销毁单元的问题。

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

+0

不错的演示。用Apple提交错误报告! – matt

回答

0

至少使用Xcode 7.2/iOS 9.2 SimulatorXcode 7.3/iOS 9.3 Device所有细胞得到释放。只有更改是取消分配的顺序,删除的单元格最后才会被分配。

相关问题