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 ?
Danke!
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 ansuper
in Ihrer Implementierung senden.
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)
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.
Tags und Links objective-c unit-testing initialization global-variables autorelease