Swift - деинициализация
Перед освобождением экземпляра класса необходимо вызвать деинициализатор, чтобы освободить пространство памяти. Ключевое слово deinit используется для освобождения пространства памяти, занятого системными ресурсами. Деинициализация доступна только для типов классов.
Деинициализация для освобождения пространства памяти
Swift 4 автоматически освобождает ваши экземпляры, когда они больше не нужны, чтобы освободить ресурсы. Swift 4 обрабатывает управление памятью экземпляров с помощью автоматического подсчета ссылок (ARC), как описано в разделе Автоматический подсчет ссылок. Обычно вам не нужно выполнять ручную очистку, когда ваши экземпляры освобождены. Однако, когда вы работаете со своими собственными ресурсами, вам может потребоваться выполнить дополнительную очистку самостоятельно. Например, если вы создаете настраиваемый класс для открытия файла и записи в него некоторых данных, вам может потребоваться закрыть файл до того, как экземпляр класса будет освобожден.
var counter = 0; // for reference counting
class baseclass {
init() {
counter++;
}
deinit {
counter--;
}
}
var print: baseclass? = baseclass()
print(counter)
print = nil
print(counter)
Когда мы запускаем вышеуказанную программу с помощью игровой площадки, мы получаем следующий результат -
1
0
Когда оператор print = nil опущен, значения счетчика остаются прежними, поскольку он не деинициализируется.
var counter = 0; // for reference counting
class baseclass {
init() {
counter++;
}
deinit {
counter--;
}
}
var print: baseclass? = baseclass()
print(counter)
print(counter)
Когда мы запускаем вышеуказанную программу с помощью игровой площадки, мы получаем следующий результат -
1
1