2010-10-04 20 views
7

me gustaría lograr algo parecido a lo que se está haciendo en este post: sin embargo Constants in Objective-CCreación de un constante objeto de diccionario

, me gustaría construir un NSDictionary.

si no hago algo como:

constants.h

extern NSArray *const mFooKeys; 
extern NSArray *const mFooObjects; 
extern NSDictionary *const mFooDictionary; 

constants.m

NSArray *const mFooKeys = [[NSArray alloc] initWithObjects: 
            @"Foo", @"Bar", @"Baz", nil]; 
NSArray *const mFooObjects = [[NSArray alloc] initWithObjects: 
            @"1", @"2", @"3", nil]; 
NSDictionary *const mFooDictionary = [[NSDictionary alloc] dictionaryWithObjects:mFooObjects 
                     forKeys:mFooKeys]; 

hago Libero en dealloc y todo está bien, o hay más a él ? esta es más una pregunta cautelosa que una pregunta de "algo está mal", pero siento que realmente podría estropear esto sin darme cuenta.

Respuesta

5

Con el fin de tener una constante como un NSDictionary que se basa en otros tipos de datos básicos, que tienen necesidad de incluirlo en la clase que va a utilizar la constante, o crear un Singleton class y almacenar el NSDictionary allí. Solo hay algunos tipos de clases que no funcionarán en la implementación que está viendo; el código de constantes que está buscando debería ser usado como un objeto para funcionar correctamente, pero creo que ese tipo de derrota el propósito. No estoy seguro de cuál es el factor determinante para lo que puede y no puede hacer en la implementación de constantes simples, pero me encontré con el mismo problema y el patrón de diseño de Singleton funcionó perfectamente para mí. (De cualquier manera, debe dealloc de forma apropiada aunque existan durante la vida de la aplicación.)

0

Las declara como constantes, por lo que son objetos únicos que durarán toda la vida de su aplicación. No es necesario liberar, ya que son necesarios hasta que se cierre la aplicación.

No desea liberar en dealloc, ya que se lanzará cada vez que se desasigna una instancia de la clase relevante.

Cuestiones relacionadas