Swift - Deinitialisierung

Bevor eine Klasseninstanz freigegeben werden muss, muss 'deinitializer' aufgerufen werden, um die Zuweisung des Speicherplatzes aufzuheben. Das Schlüsselwort 'deinit' wird verwendet, um die von den Systemressourcen belegten Speicherplätze freizugeben. Die Deinitialisierung ist nur für Klassentypen verfügbar.

Deinitialisierung zur Freigabe des Speicherplatzes

Swift 4 gibt Ihre Instanzen automatisch frei, wenn sie nicht mehr benötigt werden, um Ressourcen freizugeben. Swift 4 übernimmt die Speicherverwaltung von Instanzen durch automatische Referenzzählung (ARC), wie unter Automatische Referenzzählung beschrieben. Normalerweise müssen Sie keine manuelle Bereinigung durchführen, wenn Ihre Instanzen freigegeben werden. Wenn Sie jedoch mit Ihren eigenen Ressourcen arbeiten, müssen Sie möglicherweise selbst eine zusätzliche Bereinigung durchführen. Wenn Sie beispielsweise eine benutzerdefinierte Klasse erstellen, um eine Datei zu öffnen und einige Daten in sie zu schreiben, müssen Sie die Datei möglicherweise schließen, bevor die Zuordnung der Klasseninstanz aufgehoben wird.

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

print(counter)
print = nil
print(counter)

Wenn wir das obige Programm auf einem Spielplatz ausführen, erhalten wir das folgende Ergebnis:

1
0

Wenn die Anweisung print = nil weggelassen wird, bleiben die Werte des Zählers gleich, da er nicht deinitialisiert ist.

var counter = 0; // for reference counting

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

Wenn wir das obige Programm auf einem Spielplatz ausführen, erhalten wir das folgende Ergebnis:

1
1