Учебники

Свифт — Деинициализация

Перед тем, как экземпляр класса должен быть освобожден, должен быть вызван deinitializer для освобождения пространства памяти. Ключевое слово 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)

Когда мы запускаем вышеуказанную программу, используя площадку, мы получаем следующий результат —