Что такое deinit в Swift?

«Что такое deinit в Swift?» — вопрос из категории Управление памятью, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Основные характеристики:

  • Применяется только к классам (не к структурам или перечислениям).
  • Не принимает параметров и не может быть вызван вручную.
  • Вызывается автоматически, когда счетчик сильных ссылок на объект становится равным нулю.
  • Не гарантируется вызов при retain cycle (цикле сильных ссылок).

Пример использования для освобождения ресурсов:

class FileHandler {
    let filePath: String

    init(path: String) {
        filePath = path
        print("Файл \(filePath) открыт.")
    }

    deinit {
        // Закрытие файла, отмена сетевых запросов, удаление наблюдателей
        print("Файл \(filePath) закрыт, ресурсы освобождены.")
    }
}

// Создание и освобождение
var handler: FileHandler? = FileHandler(path: "document.txt")
// Вывод: Файл document.txt открыт.
handler = nil // Счетчик ссылок становится 0
// Вывод: Файл document.txt закрыт, ресурсы освобождены.