2010-08-16 8 views
18

¿Cuál es la mejor manera de definir una cadena accesible globalmente?Definición de una cadena accesible globalmente en Objective-C

veo que por lo general es número entero como esto #define fácil 0

Sin embargo, ¿cómo puedo emular que por NSString?
Intenté estático NSString *BACKGROUND = @"bg.png";
Mientras que ese trabajo, da una advertencia diciendo que la variable nunca se usa. (Tengo todos estos en un archivo .h)

Hacer NSString *const BACKGROUND = @"bg.png"; es aún peor ya que dice variable duplicada cuando importo el archivo.

Veo que #define BACKGROUND @"bg.png" parece funcionar también.

así que supongo que lo que es la diferencia entre el momento de utilizar #define, const & static

Gracias,
Tee

+1

Otra posibilidad es cargar cadenas localizadas de los recursos. Consulte http://developer.apple.com/mac/library/documentation/cocoa/conceptual/LoadingResources/Strings/Strings.html –

Respuesta

43

Esta es la forma correcta de hacerlo. Haga un nuevo archivo .h en blanco y .m. En su archivo .h:

extern NSString* const BACKGROUND; 

en su archivo .m:

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

En realidad, es 'extern NSString * const'; de lo contrario, el contenido de la cadena (es decir,' * ANTECEDENTES ') se marcan const en lugar de puntero. –

+3

Cuando dices la respuesta correcta, ¿qué quieres decir? ¿Es mejor usar const externo que usar #define? ¿Se debe al rendimiento? – carbonr

+7

Si define, básicamente realiza una búsqueda y reemplaza a través de toda la base de códigos. Si usa un const, será un entero de 32/64 apuntando a la cadena en la memoria. Mucho más eficiente que tener la cadena asignando memoria donde sea que se use. –

6

Es posible que desee considerar el uso de un property list para almacenar sus cadenas. Esto permite que su código se mantenga flexible para futuras actualizaciones, especialmente si agrega soporte para localización.

Cuestiones relacionadas