【问题标题】:What happens to the UICollectionView maintained cell queue on receiving memory warning?收到内存警告时 UICollectionView 维护的单元队列会发生什么?
【发布时间】:2017-04-11 11:03:00
【问题描述】:

当 UICollectionViewCell 对象不可见时,它们会被添加到队列中以供重用。如果发生内存警告,可重用队列中的单元会发生什么情况。队列是否已清空,单元格是否已被销毁,还是保持原样?

【问题讨论】:

  • 你为什么要关心?如果它被破坏了,你无论如何都应该创建一个新的,所以它不应该真的打扰你
  • @Lefteris 可以说我有不同的单元格,内容繁重,占用大量内存。如果我知道在出现内存警告时会发生什么情况,那将是一个额外的优势。很高兴知道我是否可以依赖系统或需要清除该内存。
  • 然后把重的内容放到自动释放池中
  • 嘿,这里的队列是什么意思?..调度队列还是其他?
  • @PhaniRaghu 它是 UICollectionView 实例的可重用队列

标签: ios cocoa-touch uicollectionview uikit uicollectionviewcell


【解决方案1】:

如果您对您的单元格保持强引用,那么它们将不会被删除,并且您将拥有这些单元格的音调。您还必须记住,如果您的单元格没有正确出列并且您对该单元格有强引用,那么您的 tableViewController 也不会重新初始化。

【讨论】:

  • 在我的案例中,我没有对单元格进行强引用。我只想知道在内存警告的情况下队列会发生什么,因为它的实现是隐藏的。
  • 没有人想要保持对单元格的引用,但有时会发生这种情况,导致您的滚动速度开始变得不稳定,直到您的应用程序内存不足并且系统将杀死您的应用程序
【解决方案2】:

在收到内存警告时,不可见的单元格对象将从内存中清除,同时出队管理器在内部处理此过程。

要了解更多,内存管理是如何工作的?在模拟器中运行您的代码。

打印单元格对象,它提供了它获得的地址。稍后在菜单中选择Hardware选项以生成内存警告。

"row = 7 ->  cell = <UICollectionViewCell: 0x7ff8b89096e0; frame = (2 1935; 371 265); clipsToBounds = YES; hidden = YES; opaque = NO; layer = <CALayer: 0x61800003da20>>"

这也将帮助您更多地了解地址管理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    相关资源
    最近更新 更多