Objective-C initialize (statische Methode) mehr als einmal aufgerufen?

7

Ich habe einen ähnlichen Code in Objective-C:

%Vor%

Ich habe dies im gesamten Code referenziert, und der Zeiger darauf sollte sich niemals ändern, weil ich ihn überall durch meinen Code verwende. Das Problem ist, dass wenn ich meine Tests mit GHUnit durchführe, ich seltsame Probleme mit dem GlobalVariableThatShouldNeverChange 's Zeiger habe (dh es wird gerade neu initialisiert. Ich hatte ein Problem mit der Freigabe der Variablen über den Autorelease-Pool und das ist behoben, und ich habe eine Problemumgehung für dieses Problem, aber ich würde gerne warum ?

wissen

Danke!

    
Richard J. Ross III 11.10.2010, 21:46
quelle

3 Antworten

16

Die Dokumente sagen:

  

Die Laufzeit sendet initialize an jede Klasse in einem Programm genau einmal vor der Klasse, oder jede Klasse, die von ihr erbt .

Der empfohlene Ansatz ist:

%Vor%

Beachten Sie auch die folgende Empfehlung aus der Dokumentation:

  

... Normalerweise sollten Sie initialize nicht an super in Ihrer Implementierung senden.

    
dreamlax 11.10.2010, 21:55
quelle
6

Die kurze Antwort ist ja, +initialize kann mehr als einmal aufgerufen werden.

Bill Bumgarner hat dazu in seinem Blog einen guten Artikel geschrieben. Siehe + initialize Can Be Mehrere Male ausgeführt (+ Laden nicht so viel)

    
Jay O'Conor 11.10.2010 21:56
quelle
2

Um die Dreamlax-Antwort zu addieren: Achten Sie darauf, dass Sie Unterklassen haben, ohne sie explizit zu erstellen, dh wenn Sie KVO verwenden, wird eine Unterklasse on-the-fly erstellt (die wiederum initialisiert), und Alle Ihre Instanzen werden genau in diese Klasse geändert.

    
DrMickeyLauer 18.01.2012 16:14
quelle