В чем разница между UITableView и UIScrollView в iOS?

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

Ответ

UITableView — это специализированный подкласс UIScrollView, оптимизированный для отображения вертикальных списков данных.

Ключевые отличия:

Аспект UITableView UIScrollView
Назначение Отображение структурированных списков (секции, строки). Прокрутка произвольного контента любого размера.
Оптимизация Использует переиспользование ячеек (dequeueReusableCell), что критично для производительности с большими наборами данных. Отображает все добавленные subviews одновременно, что может привести к проблемам с памятью для сложного контента.
Архитектура данных Работает через протоколы UITableViewDataSource и UITableViewDelegate (методы для количества секций, строк, конфигурации ячеек). Не имеет встроенной модели данных; управление контентом полностью ручное.
Структура Иерархическая (секции → строки). Доступ по IndexPath. Плоская (массив subviews).

Примеры:

UITableView (с переиспользованием ячеек):

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CellID", for: indexPath)
    cell.textLabel?.text = items[indexPath.row]
    return cell
}

UIScrollView (ручная настройка):

let contentView = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 2000))
scrollView.addSubview(contentView)
scrollView.contentSize = contentView.bounds.size

Когда использовать:

  • UITableView — для любых списков, таблиц, коллекций однотипных элементов.
  • UIScrollView — для кастомных прокручиваемых интерфейсов, например, пошаговых форм, галерей или страниц с нерегулярным макетом.