加载收藏夹视图时节省内存

时间:2018-08-13 21:06:47

标签: swift firebase memory google-cloud-firestore

从数据库将项目加载到集合视图中时,我将如何节省内存?假设我在一个数据库中有10,000多个项目(包括图像)正在被检索到一个集合视图中,并且从数据库中也检索了多个标签。

我是否只需要检索前20-50个项目,然后创建一个函数来检索用户传递的数据中的下一组数据,或者它与图像有更多关系?

2 个答案:

答案 0 :(得分:1)

仅应在需要时检索数据。 Core Data已经为您准备好了。看看NSFetchedResultsController

答案 1 :(得分:1)

从iOS 10开始,您可以通过UICollectionViewDataSourcePrefetching协议prefetch数据。

我鼓励您下载示例并进行试验,但是从本质上讲,它允许您:

  • 在屏幕上需要之前获取数据。
  • 异步加载数据。
  • 取消不必要的提取。

就内存问题而言,表视图和集合视图都使用对象池来重用单元格视图,并用新数据填充它们。

更具体地说,这是通过在UICollectionViewDataSource方法dequeueReusableCell(withReuseIdentifier:for:)的实现中调用collectionView(_:cellForItemAt:)来实现的

例如:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    // Dequeues an existing cell if one is available, 
    // or creates a new one based on the registered class/nib.
    guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: Cell.reuseIdentifier, for: indexPath) as? Cell else {
        fatalError("Expected `\(Cell.self)` type for reuseIdentifier \(Cell.reuseIdentifier). Check the configuration in Main.storyboard.")
    }
    // Configure the cell for display.
    return cell
}

快乐编码:D