deleteRowsAtIndexPaths:滑动删除行永远不会释放单元格?

der*_*rbs 8 objective-c uitableview dealloc ios

我想知道我是不是在某种程度上偶然发现了一个错误,刷卡删除UITableViewCells时不会释放它们UITableViewController.

我在自定义表格单元格中添加了一个-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>>
Run Code Online (Sandbox Code Playgroud)

这应该已经解除分配!该x.position小区是完全-(tableView.width)hidden=YES.因为在动画完成后单元格仍然处于该位置.或者它可能正在排队等待重用?无论哪种方式,它都是永远存在的,Apple的文档中没有任何关于在调用deleteRowsAtIndexPaths之后必须手动销毁单元格的内容.

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

HBu*_*HBu 0

至少使用Xcode 7.2/iOS 9.2 Simulator并且Xcode 7.3/iOS 9.3 Device所有单元格都被释放。唯一的变化是释放的顺序,已删除的单元格最后被释放。