Un poco tarde para la fiesta, pero como no está cambiando los valores a lo largo del programa, si solo estaba tratando con cadenas, puede hacer lo siguiente declarando su matriz usando una matriz C
:
extern NSString * const MY_CONSTANT_STRING_ARRAY[];
en su archivo constants.h
, y luego en su constants.m
se podría añadir objetos a la misma, así:
NSString * const MY_CONSTANT_STRING_ARRAY[] = { @"foo", @"bar" };
a continuación, para acceder a un miembro, usted podría hacer un bucle al igual que el ingenio ja C
sizeof()
operador:
Esto, obviamente, es una matriz C
y no un NSArray
para que no se consigue todos los métodos de diversión que se le atribuye como objectAtIndex:
, por lo que podría crear una función de ayuda en alguna parte de su programa que se repite a través de todas las cadenas usando el método que describí anteriormente y devuelve un NSArray
(o NSMutableArray
par). Pero, si estaba haciendo lo que hago y solo necesita una matriz constante de valores NSString
para utilizar en su programa, este método funciona mejor.
Hacerlo de esta manera encapsula todas sus contants matriz de cadenas en constants.h
, y que está disponible a través de su programa agregando constants.h
en su archivo .pch
en lugar de crear un producto único sólo para este conjunto de valores o la creación de la matriz con un poco código, que sorta derrota el propósito de un archivo constants
porque elimina las constantes reales del archivo constants
..
EDITAR por @ Comentario de JesseGumpo:
Dado que puede haber problemas con el uso sizeof()
para determinar el tamaño de la matriz, una solución sencilla consiste en declarar el tamaño de la matriz en sus constantes presentar de este modo:
//.h
extern int SIZE_OF_MY_CONSTANTS_ARRAY;
///.m
int SIZE_OF_MY_CONSTANTS_ARRAY = 2;
Y a continuación, para acceder a los miembros en un bucle for puede hacerlo de esta manera:
for (int i=0; i < SIZE_OF_MY_CONSTANTS_ARRAY; i++)
NSLog(@"my constant string is: %@", MY_CONSTANT_STRING_ARRAY[i]);
Sí, esto no captura dinámicamente el tamaño de la matriz, pero si declara una matriz en un archivo de constantes, ya conoce el tamaño de esa matriz desde el principio, por lo que a pesar de que agrega dos líneas más de código, todavía logra la tarea de tener una matriz en un archivo de constantes.
Si alguien tiene más sugerencias o puede conocer algunos otros trucos de C
por favor deje un comentario abajo!
Por 'constante' ¿qué quieres decir? Contenido inmutable del objeto, o puntero inmutable? – zneak
Bueno, mis criterios son: 1) Los valores no se pueden cambiar accidentalmente (entonces supongo que NSArray es bueno), 2) disponibles en cualquier parte del programa (estoy incluyendo 'constants.h' en mi archivo .pch), 3) Solo se ha declarado una vez – Andrew
[Ver esta pregunta TAN] (http://stackoverflow.com/questions/1059708/defining-a-constant-in-objective-c) – conorgriffin