Опишите жизненный цикл объекта в Swift (iOS).

«Опишите жизненный цикл объекта в Swift (iOS).» — вопрос из категории Управление памятью, который задают на 29% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Жизненный цикл объекта в Swift управляется Automatic Reference Counting (ARC) и состоит из трех основных этапов:

  1. Инициализация (Allocation & Initialization):

    • Выделяется память.
    • Вызывается назначенный инициализатор (init).
  2. Использование (Usage):

    • Объект находится в памяти и выполняет свою функцию.
    • ARC отслеживает количество сильных ссылок (strong references) на объект.
  3. Деинициализация (Deinitialization):

    • Когда счетчик сильных ссылок достигает нуля, ARC автоматически вызывает деинициализатор (deinit).
    • Память освобождается.

Пример:

class MyClass {
    init() { print("Инициализация")
    deinit { print("Деинициализация") }
}

var object: MyClass? = MyClass() // Вывод: "Инициализация"
object = nil // Вывод: "Деинициализация" (ARC освобождает память)

Критически важные аспекты:

  • Циклические ссылки (Retain Cycles): Если два объекта хранят сильные ссылки друг на друга, ARC никогда не освободит их память, вызывая утечку.
  • Слабые ссылки: Используйте weak (становится nil) или unowned (не становится nil, но требует гарантии существования объекта) для разрыва циклов, особенно в замыканиях и отношениях parent-child.
  • deinit вызывается только системой, его нельзя вызвать вручную.