deinit: как и где вызывается?

deinit — деинициализация. Вызывается перед освобождением экземпляра класса. Деинициализаторы доступны только для классовых типов.

Как правило, deinit не вызывается специально, что означает — не нужно вручную чистить память. Swift берет эту роль на себя, работает это при помощи автоматического подсчета ссылок (ARC).

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

Пример использования deinit

Деинициализацию используют при создании собственного класса для редактирования файлов (запись информации в файл). При этом, важно самостоятельно проследить за закрытием этого файла перед тем, как освободится экземпляр класса.

На один класс указывается максимум один деинициализатор. Деинициализатор не принимает ни одного параметра и пишется без круглых скобок:

deinit {
  // деинициализация
}

Деинициализация вызывается автоматически перед освобождением экземпляра.

Пример:

class Foo {
    deinit {
        print("Deinitializing")
    }
}

func bar() {
    var foo: Foo? = Foo()
    foo = nil
    print("Leaving scope")
}

bar()

При выполнении этого кода появляется следующий вывод:

Deinitializing
Leaving scope

deinit вызывается в тот момент, когда счетчик ссылок на объект падает до нуля, в 9 строчке кода. Таким образом, деинициализация происходит перед освобождением экземпляра.

Больше информации:

Выразить благодарность или найти уникальный материал вы можете в boosty.

Подписывайтесь на мой Telegram-канал iOS Interview Channel, чтобы не пропустить новый материал.


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *