Die kurze Antwort auf Ihre Frage lautet: "Wenn das Programm beendet wird."
Statische Variablen werden am Anfang Ihres Programms zugewiesen, bevor die main()
-Funktion beginnt. Ebenso werden sie am Ende Ihres Programms veröffentlicht, kurz nachdem main()
beendet wird. Diese Speicherverwaltung wird von der Objective-C-Laufzeit ausgeführt, und alles geschieht hinter den Kulissen.
Wenn Sie versuchen, dieses Verhalten zu überwachen, werden Sie wahrscheinlich nicht viel Glück haben. wenn Sie die folgenden in einer benutzerdefinierten Klasse haben, zum Beispiel, und verwendet dann die Klasse als statisches Mitglied einer anderen Klasse:
- (void)dealloc
{
NSLog(@"I am being deallocated");
[super dealloc];
}
würden Sie nie diese Meldung im Protokoll erscheinen sehen. Dafür gibt es mehrere Gründe. Eins, die Variablen, die NSLog()
erfordert, wurden möglicherweise bereits im Rahmen der normalen Abschaltprozedur freigegeben. Und zweitens, weil das Laufzeitsystem einfach den gesamten verbleibenden Speicher in einer einzelnen Aufnahme freigeben kann, ohne sich darum zu kümmern, die Methoden dealloc
aufzurufen.
Dies kann problematisch sein, wenn Ihre benutzerdefinierte Klasse in ihrer dealloc
Methode etwas Wichtiges tut. Wenn dies der Fall ist, sollten Sie eine benutzerdefinierte cleanup
Methode schreiben, die Sie für diese Objekte kurz vor dem Beenden des Programms aufrufen.
Gerade kam diese Frage beim Lernen Obj-C. Apple scheint darauf hinzuweisen, dass es keine "Klassenvariable" gibt, und was Sie in der Schnittstelle definiert haben, ist eher eine Klasse * -Methode *, die von der statischen Variable getrennt ist und daher in der Implementierung definiert werden muss. Die statische Variable ist auf den Umfang der Implementierung * file * beschränkt, nicht auf die Klasse selbst. Vielleicht ist das ein kleiner Streit, aber es verwirrte mich für eine Sekunde: http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/ObjectiveC/Articles/ocObjectsClasses.html#//apple_ref/doc/ uid/TP30001163-CH11-TPXREF118 –