2012-04-22 23 views
6

Tengo algunas constantes codificadas en unas pocas clases diferentes de viewController y NSObject atm. Uno de los muchachos en mi trabajo dijo que debería ponerlos en una clase propia (es decir, una clase de constantes)objetivo c constantes clase

Me pregunto cuáles serían los pro y los contras de este tipo de diseño y también si es algo que debería hacerse cualquier aclaración sobre cómo hacerlo sería genial.

por ejemplo, ¿acabo de crear una nueva clase NSObject y tengo un montón de #defines en ella? luego, cuando necesito usarlos ¿simplemente subclases mi clase de constantes y uso las constantes dentro de esta clase como lo haría con cualquier otro método o variable de otra clase?

es decir

myclass.theConstant 

cualquier ayuda sería appreicated en gran medida.

+1

Manjunath publicó una respuesta excelente aquí: http://stackoverflow.com/a/2377432/1218605 –

Respuesta

11

Poner constantes con las cosas que los usan. No cree un archivo global "todo constante". Esto hace que la reutilización de código sea un gran dolor de cabeza. Por ejemplo, si publica una notificación, necesita una cadena de nombre de notificación. Entonces lo pones en la clase que publica la notificación:

.h 
extern NSString * const MYObjectDidSomethingNotification; 

.m 
NSString * const MYObjectDidSomethingNotification = @"MYObjectDidSomethingNotification"; 

Las constantes generalmente no son métodos o definiciones. Son solo globales constantes como los de arriba. Debe evitar #define siempre que sea posible, pero hay algunos lugares que es bastante útil (como los objetos constantes UIColor, que de lo contrario son frustrantes inicializar).

Dedique un poco de tiempo en los archivos de encabezado de Apple para ver ejemplos. Busque en UIWindow.h, UITableViewCell.hy UITableView.h un par de buenos ejemplos de cómo se definen generalmente las constantes.

+0

bien, gracias por su respuesta. ¿Por qué #define es malo? solo por curiosidad. –

+0

También me pregunto por qué las definiciones son malas para las constantes. ¿Es por la falta de seguridad tipo? – borrrden

+4

Scoping. Escriba seguridad. Puede ser evaluado en el depurador. Mejor información escondida. Cambiar una constante no requiere recompilar todo el programa. Evita problemas de compilación alucinantes cuando las definiciones se redefinen accidentalmente. Hay excepciones donde #define es requerido y en algunos casos preferido. Pero su valor predeterminado debe ser escribir su código en Objective-C, no en el lenguaje de macro del preprocesador. Nuevamente, observe el SDK de Apple y notará una falta evidente de #define, excepto en casos muy específicos (como NSAssert). –

0

Si solo tiene #defines, no es necesario que estén en ninguna clase, simplemente póngalos en su propio archivo .h.