Когда загружается и читается XIB-файл в iOS?

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

Ответ

XIB (XML Interface Builder) компилируется в бинарный NIB-файл на этапе сборки проекта. Непосредственное чтение (десериализация) NIB и создание объектов интерфейса происходит во время выполнения (runtime) при явном вызове методов загрузки.

Типичные точки загрузки:

  • Для UIViewController: При инициализации через init(nibName:bundle:) или при создании контроллера из storyboard, если для него указан отдельный XIB.
  • Для UIView: При явном вызове UINib(nibName:bundle:).instantiate(withOwner:options:) или Bundle.main.loadNibNamed(_:owner:options:).

Пример:

// Загрузка кастомного UIView из XIB
if let loadedViews = Bundle.main.loadNibNamed("CustomView", owner: nil, options: nil),
   let customView = loadedViews.first as? CustomView {
    addSubview(customView)
}

// Кэширование UINib для эффективной многократной загрузки
static let nib = UINib(nibName: "CustomCell", bundle: nil)
let cell = Self.nib.instantiate(withOwner: nil, options: nil).first as! CustomCell

Важные детали:

  • Загрузка происходит синхронно в том потоке, где вызвана (обычно главный).
  • После создания объектов из NIB автоматически устанавливаются связи IBOutlet и IBAction.
  • Для оптимизации интерфейсов, создаваемых многократно (например, ячеек таблицы), рекомендуется кэшировать экземпляр UINib.