收到内存警告时 UICollectionView 维护的单元队列会发生啥?
Posted
技术标签:
【中文标题】收到内存警告时 UICollectionView 维护的单元队列会发生啥?【英文标题】:What happens to the UICollectionView maintained cell queue on receiving memory warning?收到内存警告时 UICollectionView 维护的单元队列会发生什么? 【发布时间】:2017-04-11 11:03:00 【问题描述】:当 UICollectionViewCell 对象不可见时,它们会被添加到队列中以供重用。如果发生内存警告,可重用队列中的单元会发生什么情况。队列是否已清空,单元格是否已被销毁,还是保持原样?
【问题讨论】:
你为什么要关心?如果它被破坏了,你无论如何都应该创建一个新的,所以它不应该真的打扰你 @Lefteris 可以说我有不同的单元格,内容繁重,占用大量内存。如果我知道在出现内存警告时会发生什么情况,那将是一个额外的优势。很高兴知道我是否可以依赖系统或需要清除该内存。 然后把重的内容放到自动释放池中 嘿,这里的队列是什么意思?..调度队列还是其他? @PhaniRaghu 它是 UICollectionView 实例的可重用队列 【参考方案1】:如果您对您的单元格保持强引用,那么它们将不会被删除,并且您将拥有这些单元格的音调。您还必须记住,如果您的单元格没有正确出列并且您对该单元格有强引用,那么您的 tableViewController 也不会重新初始化。
【讨论】:
在我的案例中,我没有对单元格进行强引用。我只想知道在内存警告的情况下队列会发生什么,因为它的实现是隐藏的。 没有人想要保持对单元格的引用,但有时会发生这种情况,导致您的滚动速度开始变得不稳定,直到您的应用程序内存不足并且系统将杀死您的应用程序【参考方案2】:在收到内存警告时,不可见的单元格对象将从内存中清除,同时出队管理器在内部处理此过程。
要了解更多,内存管理是如何工作的?在模拟器中运行您的代码。
打印单元格对象,它提供了它获得的地址。稍后在菜单中选择Hardware选项以生成内存警告。
"row = 7 -> cell = <UICollectionViewCell: 0x7ff8b89096e0; frame = (2 1935; 371 265); clipsToBounds = YES; hidden = YES; opaque = NO; layer = <CALayer: 0x61800003da20>>"
这也将帮助您更多地了解地址管理。
【讨论】:
以上是关于收到内存警告时 UICollectionView 维护的单元队列会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章
在 UICollectionView iOS 7 中收到内存警告
使用 UICollectionView 收到内存警告以查看图像