Initialisierung einer statischen Variable in der Objective-C-Kategorie

8

Ich habe versucht, eine statische Variable zu erstellen, um ein Wörterbuch von Bildern zu speichern. Unglücklicherweise war der beste Weg, um es zu initialisieren, das Einchecken jeder Funktion, die die Variable verwendet hat. Da ich diese Variable innerhalb einer Kategorie erstelle, kann ich sie nicht einfach im Initialisierer initialisieren. Gibt es eine nettere Art der NavigationBarImages zu initialisieren?

%Vor%     
Casebash 12.01.2010, 02:58
quelle

5 Antworten

24
%Vor%

Diese Funktion wird beim Programmstart und -ende automatisch aufgerufen.

    
kennytm 12.01.2010, 06:00
quelle
10

Betrachten Sie diesen Ansatz,

%Vor%

Wenn Sie navigationBarImages verwenden möchten, ersetzen Sie es wie folgt mit navigationBarImages () :

ändern

%Vor%

bis

%Vor%

Wenn der Overhead des Funktionsaufrufs Sie stört, verwenden Sie möglicherweise eine temporäre Variable, um die Rückgabe von navigationBarImages (),

zu erfassen %Vor%

Der Nachteil ist, dass Sie, sobald Sie navigationBarImages () aufgerufen haben, die Instanz von NSMutableDictionary erstellt wurde, dann wird es niemals die Chance bekommen, bis zum Ende des Programms die Zuordnung aufzuheben.

    
yehnan 12.01.2010 03:27
quelle
2

Alles, was Sie brauchen, ist, Ihr Static einmal an einem bekannten Punkt zu setzen, bevor es benutzt wird. Sie können z. B. einen NSApplication-Delegaten festlegen und ihn in -applicationDidFinishLaunching:

arbeiten lassen     
Jon Reid 12.01.2010 03:10
quelle
1

Eine Option ist die Verwendung von C ++. Ändern Sie die Dateiendung in .mm und ersetzen Sie = NULL durch [[NSMutableDictionary alloc] init] .

    
Marcelo Cantos 12.01.2010 03:00
quelle
0

Sie könnten +initialize in der .m-Datei deiner Kategorie - du musst nur sicherstellen, dass du keine existierende Implementierung zerschmetterst, sonst bekommst du eine allgemeine Wonkiness. (Natürlich können Sie sich dessen sicher sein, wenn Sie den Code geschrieben haben, aber mit Code von Drittanbietern ist dies wahrscheinlich nicht der beste Ansatz.)

    
Quinn Taylor 12.01.2010 03:31
quelle