Как оптимизировать скроллинг в UITableView или UICollectionView, чтобы избежать лагов?

«Как оптимизировать скроллинг в UITableView или UICollectionView, чтобы избежать лагов?» — вопрос из категории UIKit, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основные методы оптимизации скроллинга:

  1. Переиспользование ячеек: Всегда используйте reuseIdentifier.

    tableView.register(CustomCell.self, forCellReuseIdentifier: "CellID")
  2. Оптимизация рендеринга:

    • Избегайте сложных слоёв (масок, теней, прозрачности alpha < 1).
    • Кэшируйте вычисленные размеры ячеек (systemLayoutSizeFitting).
    • Настраивайте ячейки в tableView(_:willDisplay:forRowAt:), а не в cellForRowAt.
  3. Работа с данными:

    • Выполняйте тяжёлые операции (загрузка изображений, парсинг) асинхронно.
    • Используйте prefetchDataSource для предзагрузки данных.
      tableView.prefetchDataSource = self
  4. Оптимизация Auto Layout:

    • Минимизируйте количество констрейнтов.
    • Используйте estimatedRowHeight.
    • Рассмотрите ручной расчёт frame для максимальной производительности.
  5. Профилирование: Используйте Instruments (Time Profiler, Core Animation) для поиска узких мест.