Swift Deinitialisierung

Ein Deinitialisierer wird unmittelbar aufgerufen, bevor eine Instanz einer Klasse freigegeben wird. Verwenden Sie das Schlüsselwortdeinitum den Deinitialisierer anzugeben, ähnlich wie der Initialisierer verwendetinitum es anzugeben. Deinitialisierer gelten nur für Klassentypen.


Prinzipien der Deinitialisierung

Swift gibt Instanzen, die nicht mehr benötigt werden, automatisch frei, um Ressourcen freizugeben.

Swift übernimmt die Speicherverwaltung von Instanzen durch Automatic Reference Counting (ARC).

Im Allgemeinen müssen Sie nicht manuell aufräumen, wenn Ihre Instanz freigegeben wird. Wenn Sie jedoch eigene Ressourcen verwenden, müssen Sie möglicherweise einige zusätzliche Aufräumarbeiten durchführen.

Wenn Sie beispielsweise eine benutzerdefinierte Klasse erstellen, um eine Datei zu öffnen und einige Daten zu schreiben, müssen Sie die Datei möglicherweise schließen, bevor die Klasseninstanz freigegeben wird.

Syntax

In der Klassendefinition kann jede Klasse höchstens einen Deinitialisierer haben. Der Deinitialisierer nimmt keine Parameter entgegen und wird ohne Klammern geschrieben:

deinit {
    // 执行析构过程
}

Beispiel

var counter = 0;  // 引用计数器
class BaseClass {
    init() {
        counter += 1;
    }
    deinit {
        counter -= 1;
    }
}

var show: BaseClass? = BaseClass()
print(counter)
show = nil
print(counter)

Die Ausgabe der obigen Programmausführung ist:

1
0

Nachdem die Anweisung show = nil ausgeführt wurde, verringert sich der Zähler um 1, und der von show belegte Speicher wird freigegeben.

var counter = 0;  // 引用计数器

class BaseClass {
    init() {
        counter += 1;
    }
    
    deinit {
        counter -= 1;
    }
}

var show: BaseClass? = BaseClass()

print(counter)
print(counter)

Die Ausgabe der obigen Programmausführung ist:

1
1
Andere Erweiterungen