Constantes en Objective-C

Resuelto Allyn asked hace 54 años • 14 respuestas

Estoy desarrollando una aplicación Cocoa y estoy usando constantes NSStringcomo 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.

Allyn avatar Jan 01 '70 08:01 Allyn
Aceptado

Deberías crear un archivo de encabezado como:

// Constants.h
FOUNDATION_EXPORT NSString *const MyFirstConstant;
FOUNDATION_EXPORT NSString *const MySecondConstant;
//etc.

(Puede usarlo externen lugar de FOUNDATION_EXPORTsi 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 .marchivo como:

// Constants.m
NSString *const MyFirstConstant = @"FirstConstant";
NSString *const MySecondConstant = @"SecondConstant";

Constants.mdebe 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 #defineconstantes '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).

Barry Wark avatar Feb 11 '2009 22:02 Barry Wark

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.

Andrew Grant avatar Feb 11 '2009 22:02 Andrew Grant