Constantes en Objective-C
Estoy desarrollando una aplicación Cocoa y estoy usando constantes NSString
como forma de almacenar nombres clave según mis preferencias.
Entiendo que es una buena idea porque permite cambiar fácilmente las claves si es necesario.
Además, se trata de la noción de "separar los datos de la lógica".
De todos modos, ¿existe una buena manera de definir estas constantes una vez para toda la aplicación?
Estoy seguro de que existe una manera fácil e inteligente, pero ahora mismo mis clases simplemente redefinen las que usan.
Deberías crear un archivo de encabezado como:
// Constants.h
FOUNDATION_EXPORT NSString *const MyFirstConstant;
FOUNDATION_EXPORT NSString *const MySecondConstant;
//etc.
(Puede usarlo extern
en lugar de FOUNDATION_EXPORT
si su código no se usará en entornos mixtos de C/C++ o en otras plataformas).
Puede incluir este archivo en cada archivo que utilice las constantes o en el encabezado precompilado del proyecto.
Estas constantes se definen en un .m
archivo como:
// Constants.m
NSString *const MyFirstConstant = @"FirstConstant";
NSString *const MySecondConstant = @"SecondConstant";
Constants.m
debe agregarse al objetivo de su aplicación/marco para que esté vinculado al producto final.
La ventaja de usar constantes de cadena en lugar de #define
constantes 'd es que puede probar la igualdad usando la comparación de punteros ( stringInstance == MyFirstConstant
), que es mucho más rápida que la comparación de cadenas ( [stringInstance isEqualToString:MyFirstConstant]
) (y más fácil de leer, en mi opinión).
La manera más fácil:
// Prefs.h
#define PREFS_MY_CONSTANT @"prefs_my_constant"
Mejor manera:
// Prefs.h
extern NSString * const PREFS_MY_CONSTANT;
// Prefs.m
NSString * const PREFS_MY_CONSTANT = @"prefs_my_constant";
Un beneficio del segundo es que cambiar el valor de una constante no provoca una reconstrucción de todo el programa.