2010-08-16 11 views
18

Qual è il modo migliore per definire una stringa accessibile globalmente?Definizione di una stringa accessibile globalmente in Objective-C

vedo che per intero di solito è in questo modo #define facile 0

Tuttavia, come posso emulare quello per NSString?
Ho provato statico NSString *BACKGROUND = @"bg.png";
Durante questo lavoro, viene visualizzato un avviso che indica che la variabile non viene mai utilizzata. (Ho tutti questi file in un file .h)

Fare NSString *const BACKGROUND = @"bg.png"; è anche peggio visto che indica la variabile duplicata quando imposto il file.

Vedo che anche #define BACKGROUND @"bg.png" sembra funzionare.

quindi credo che quello che è la differenza tra quando utilizzare #define, const & static

Grazie,
Tee

+1

Un'altra possibilità è caricare stringhe localizzate dalle risorse. Vedi http://developer.apple.com/mac/library/documentation/cocoa/conceptual/LoadingResources/Strings/Strings.html –

risposta

43

Questo è il modo corretto per farlo. Crea un nuovo file .h vuoto e .m. Nel file .h:

extern NSString* const BACKGROUND; 

nel file .m:

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

In realtà 'extern NSString * const' - altrimenti, il contenuto della stringa (cioè' * BACKGROUND') sono contrassegnati come const anziché come puntatori. –

+3

Quando dici la risposta corretta, cosa intendi? È meglio usare extern const che usare #define? È dovuto alle prestazioni – carbonr

+7

Se si definisce, fondamentalmente esegue una ricerca e sostituisce l'intero codice base. Se si utilizza un const, sarà un intero 32/64 bit che punta alla stringa in memoria. Molto più efficiente di avere la stringa che alloca la memoria ovunque sia usata. –

6

Si potrebbe voler considerare l'utilizzo di un property list per memorizzare le stringhe. Ciò consente al tuo codice di rimanere flessibile per gli aggiornamenti futuri, soprattutto se aggiungi il supporto per la localizzazione.

Problemi correlati