Swift - Deinicjalizacja

Zanim instancja klasy będzie musiała zostać zwolniona, należy wywołać „deinitializer”, aby zwolnić miejsce w pamięci. Słowo kluczowe „deinit” służy do zwalniania przestrzeni pamięci zajmowanej przez zasoby systemowe. Deinicjalizacja jest dostępna tylko dla typów klas.

Deinicjalizacja w celu zwolnienia miejsca w pamięci

Swift 4 automatycznie zwalnia Twoje instancje, gdy nie są już potrzebne, aby zwolnić zasoby. Swift 4 obsługuje zarządzanie pamięcią instancji poprzez automatyczne liczenie referencji (ARC), zgodnie z opisem w sekcji Automatyczne liczenie referencji. Zazwyczaj nie ma potrzeby ręcznego czyszczenia, gdy Twoje instancje są zwalniane. Jednak podczas pracy z własnymi zasobami może być konieczne samodzielne wykonanie dodatkowych czynności porządkowych. Na przykład, jeśli utworzysz klasę niestandardową w celu otwarcia pliku i zapisania w nim danych, może być konieczne zamknięcie pliku przed zwolnieniem instancji klasy.

var counter = 0; // for reference counting
class baseclass {
   init() {
      counter++;
   }
   deinit {
      counter--;
   }
}
var print: baseclass? = baseclass()

print(counter)
print = nil
print(counter)

Gdy uruchomimy powyższy program za pomocą placu zabaw, otrzymamy następujący wynik -

1
0

Gdy instrukcja print = nil zostanie pominięta, wartości licznika pozostają takie same, ponieważ nie jest on deinicjalizowany.

var counter = 0; // for reference counting

class baseclass {
   init() {
      counter++;
   }
   deinit {
      counter--;
   }
}
var print: baseclass? = baseclass()
print(counter)
print(counter)

Gdy uruchomimy powyższy program za pomocą placu zabaw, otrzymamy następujący wynik -

1
1