假设需要创建一个静态集合视图,该视图包含数百个部分中的数十万个项,那么如何有效地创建NSDiffableDataSourceSnapshot
在苹果的示例代码UsingCollectionViewCompositionalLayoutsAndDiffableDataSources中,它们遵循以下模式:
let itemsPerSection = 1000
let sections = Array(0..<250)
var snapshot = NSDiffableDataSourceSnapshot<Int, Int>()
var itemOffset = 0
sections.forEach {
snapshot.appendSections([$0])
snapshot.appendItems(Array(itemOffset..<itemOffset + itemsPerSection))
itemOffset += itemsPerSection
}每个部分和项目都必须是唯一的标识符。低效率来自于创建一个包含1000个Int的数组,然后执行250倍的操作。在这个例子中,在我的设备上生成它大约需要12秒。
有没有一种不同的方法来高效地生成这种结构,有什么方法可以避免预先生成它,或者这对于快照的体系结构来说是不可能的吗?
发布于 2019-07-24 07:20:45
您可以像使用传统数据源一样以增量方式构建快照。首先,使用初始项目创建快照,并在确定需要更多项目时,使用其他项目重新构建快照。
如果您不想在每次添加更多项时从头开始重新构建快照,则可以从其不同数据源的snapshot()函数中获取表的现有快照,然后使用快照的函数(如insertItems、insertSections等)手动添加其他项。
https://stackoverflow.com/questions/56915985
复制相似问题