【问题标题】:deleteRowsAtIndexPaths: swipe to delete rows never deallocates the cell?deleteRowsAtIndexPaths:滑动删除行永远不会释放单元格?
【发布时间】:2016-03-07 11:19:39
【问题描述】:

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

我在我的自定义表格单元格中添加了一个 -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

【问题讨论】:

  • 不错的演示。向 Apple 提交错误报告!

标签: ios objective-c uitableview dealloc


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 2021-01-24
    相关资源
    最近更新 更多