2010-08-16 4 views
18

Wie kann eine global zugängliche Zeichenfolge am besten definiert werden?Definieren einer global zugänglichen Zeichenfolge in Objective-C

Ich sehe, dass es in der Regel wie diese #define einfach 0

jedoch für integer, wie kann ich emulieren, dass für NSString?
Ich versuchte statisch NSString *BACKGROUND = @"bg.png";
Während dieser Arbeit gibt es eine Warnung, dass die Variable nie verwendet wird. (Ich habe alle diese in einer .h-Datei)

Doing NSString *const BACKGROUND = @"bg.png"; ist noch schlimmer, da es doppelte Variable sagt, wenn ich die Datei importieren.

Ich sehe, dass #define BACKGROUND @"bg.png" scheint auch zu arbeiten.

Also ich denke, was ist der Unterschied zwischen dem, wenn #define zu verwenden, const & static

Danke,
T

+1

Eine andere Möglichkeit besteht darin, lokalisierte Zeichenfolgen aus Ressourcen zu laden. Siehe http://developer.apple.com/mac/library/documentation/cocoa/conceptual/LoadingResources/Strings/Strings.html –

Antwort

43

Dies ist der richtige Weg, es zu tun. Erstellen Sie eine neue leere .h-Datei und .m. In Ihrer .h-Datei:

extern NSString* const BACKGROUND; 

In .m-Datei:

NSString* const BACKGROUND = @"bg.png"; 
+4

Es ist eigentlich 'extern NSString * const' - ansonsten der Inhalt der Zeichenkette (zB' * HINTERGRUND ') sind eher const als der Zeiger markiert. –

+3

Wenn du richtige Antwort sagst, was meinst du? Ist es besser, extern const als #define zu benutzen? Liegt das an der Leistung? – carbonr

+7

Wenn Sie eine Definition vornehmen, wird im Grunde genommen nach Ihrer gesamten Codebasis gesucht und diese ersetzt. Wenn Sie eine Konstante verwenden, handelt es sich um eine Ganzzahl von 32/64 Bit, die auf die Zeichenfolge im Speicher verweist. Viel effizienter, als wenn der String Speicher überall dort zuweist, wo er verwendet wird. –

6

Sie können einen property list mit speichern, die Saiten zu betrachten. Dadurch bleibt Ihr Code für zukünftige Updates flexibel, insbesondere wenn Sie Unterstützung für die Lokalisierung hinzufügen.