Эффективное создание NSDiffableDataSourceSnapshot с большим количеством разделов и элементов - PullRequest
0 голосов
/ 06 июля 2019

Учитывая необходимость создания статического представления коллекции, содержащего сотни тысяч элементов в сотнях разделов, как можно эффективно создать 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 с и выполнении этого 250x. В этом примере генерация на моем устройстве занимает около 12 секунд.

Существует ли другой способ для эффективной генерации этой структуры, любой способ избежать ее генерации заранее или это не будет возможно с архитектурой моментальных снимков?

1 Ответ

0 голосов
/ 24 июля 2019

Вы можете создавать свой снимок постепенно, как если бы вы использовали традиционный источник данных.Сначала создайте снимок с начальными элементами и, когда вы определите, что нужно больше, перестройте его с дополнительными элементами.

Если вы не хотите перестраивать моментальный снимок с нуля каждый раз, когда добавляете больше элементов, вы можете получить существующий моментальный снимок таблицы из функции snapshot() ее источника с возможностью анализа, а затем вручную добавить дополнительные элементы, используяфункции снимка, такие как insertItems, insertSections и т. д.

...