Эффективны ли сетки LazyH

#ios #swift #swiftui

Вопрос:

В документации Apple говорится, что для LAZYVGRID и Lazyhgrid эти элементы создаются только по мере необходимости. Утилизируются ли они при необходимости? Мне особенно интересно, являются ли они производительной версией представлений коллекции SwiftUI, которую можно использовать для производства. Спасибо.

Комментарии:

1. вы пробовали несколько простых тестов, чтобы увидеть, как они подходят для ваших нужд?

2. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

Ответ №1:

Они эффективны, особенно по сравнению с простым использованием a VStack . Однако — ячейки не удаляются и не воссоздаются позже, удаляются из очереди, как вы, возможно, знаете в UIKit. Ленивая загрузка помогает только при первом отображении строк, чего в большинстве случаев не будет.

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

 struct ContentView: View {
    var body: some View {
        ScrollView {
            LazyVStack {
                ForEach(0 ..< 100000) { i in
                    ForEach(0 ..< 100) { j in
                        if j == 0 {
                            Text("SPACER: (Int.random(in: 1 ... 100))")
                        } else {
                            Text("index: (j) - (i)")
                        }
                    }
                }
            }
        }
    }
}
 

Как только эти случайные числа будут сгенерированы, вы увидите, что они не обновляются и не изменяются после прокрутки сверху вниз.

В этом списке 10 миллионов элементов, что на порядки больше, чем вы хотите отобразить. Хотя он работает немного медленно, он все еще находится на грани использования. Из моего тестирования этого примера при прокрутке сверху вниз было использовано около 400 МБ памяти, гораздо больше, чем вы когда-либо хотели бы использовать.

Я думаю LazyVStack , что это прекрасно подходит почти для всех случаев использования. Обычно вам все равно следует попытаться ограничить количество элементов, так как при необходимости вы всегда можете создать систему подкачки, например, автоматическую загрузку большего количества просмотров при прокрутке вниз.

Это стресс-тест, и в реальном случае у вас не должно быть такого количества строк.

Комментарии:

1. @Vcubbz Рад, что это помогло!