Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про IOS: deinit, arc

В какой момент объект деинициализируется?

Вопрос проверяет понимание жизненного цикла объектов в ARC и того, когда реально освобождается память.

Короткий ответ

Объект деинициализируется, когда количество сильных ссылок на него становится равным нулю. В этот момент вызывается deinit, и память освобождается. ARC отслеживает это автоматически во время выполнения программы. Если существует цикл сильных ссылок, деинициализация не произойдёт. Поэтому важно правильно управлять ссылками.

Длинный ответ

Деинициализация — это финальный этап жизненного цикла объекта, и он полностью контролируется ARC.

Как ARC принимает решение об удалении объекта

ARC работает по простому правилу:

  • есть хотя бы одна strong ссылка — объект жив

  • все strong ссылки удалены — объект уничтожается

Как только счётчик становится равен нулю:

  • вызывается deinit

  • освобождается занимаемая память

  • объект становится недоступен

Что такое deinit

Определение:
deinit — это метод, который вызывается автоматически перед уничтожением экземпляра класса.

Он используется для:

  • освобождения ресурсов

  • удаления наблюдателей

  • инвалидирования таймеров

  • логирования жизненного цикла

Пример:

deinit {
    NotificationCenter.default.removeObserver(self)
}

Почему объект может не деинициализироваться

Чаще всего это происходит из-за:

  • циклов сильных ссылок

  • замыканий, захватывающих self

  • делегатов без weak

ARC не умеет «догадываться» о логике — он опирается только на ссылки.

Особенность value types

Важно помнить:

  • структуры и enum не имеют deinit

  • они уничтожаются при выходе из области видимости

  • ARC работает только с классами

Вывод

Объект деинициализируется строго в момент, когда на него больше нет сильных ссылок. Если deinit не вызывается — почти всегда это признак утечки памяти.

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • IOS

    IOS

Ключевые слова

#deinit

#arc

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.