从数据库将项目加载到集合视图中时,我将如何节省内存?假设我在一个数据库中有10,000多个项目(包括图像)正在被检索到一个集合视图中,并且从数据库中也检索了多个标签。
我是否只需要检索前20-50个项目,然后创建一个函数来检索用户传递的数据中的下一组数据,或者它与图像有更多关系?
答案 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