高效地创建带有很多节和项目的NSDiffableDataSourceSnapshot

时间:2019-07-06 16:46:42

标签: uicollectionview ios13

鉴于需要创建一个静态的集合视图,其中包含数百个部分中的数十万个项目,那么如何有效地创建NSDiffableDataSourceSnapshot

在Apple的示例代码中,UsingCollectionViewCompositionalLayoutsAndDiffableDataSources遵循以下模式:

let itemsPerSection = 1000
let sections = Array(0..<250)
let snapshot = NSDiffableDataSourceSnapshot<Int, Int>()
var itemOffset = 0
sections.forEach {
    snapshot.appendSections([$0])
    snapshot.appendItems(Array(itemOffset..<itemOffset + itemsPerSection))
    itemOffset += itemsPerSection
}

每个部分和每个项目必须是唯一的标识符。低效率在于创建1000个Int数组,并进行250倍的处理。在此示例中,大约需要12秒才能在我的设备上生成。

是否存在另一种有效地生成此结构的方法,是否有任何避免预先生成该结构的方法,或者在快照的体系结构中这不可能吗?

1 个答案:

答案 0 :(得分:0)

您可以像使用传统数据源一样逐步构建快照。首先,使用初始项目创建快照,然后在确定需要更多快照时,使用其他项目重新构建快照。

如果您不想在每次添加更多项目时从头开始重建快照,则可以从表的差异数据源的snapshot()函数获取表的现有快照,然后使用快照的手动添加其他项。 insertItemsinsertSections等功能。