2010-04-26 13 views
5

¿Dónde debo colocar los métodos de utilidad en Object-C?Métodos de utilidad en el objetivo-c

E.g. métodos adicionales de utilidad de manejo de ruta que son llamados por múltiples clases.

He visto ejemplos donde se colocan en el archivo principal de delegado de aplicaciones y, por lo tanto, están disponibles para todos. Sin embargo, esto me parece un poco extraño ...

Respuesta

1

Sí, eso es bastante extraño (y mala práctica).

Probablemente el modismo más común es usar categorías para extender las clases de sistema existentes. En algunos casos, donde no es apropiada una clase de sistema, algunos pueden crear una clase de utilidad que consista principalmente en métodos de clase o una clase singleton con métodos de instancia.

Depende de los métodos y de dónde encajen en la estructura general de la aplicación (y siempre MVC detrás de las cosas).

+0

Singletons Creo que también son exagerados. Estoy buscando el equivalente a las clases de utilidad C++ con métodos estáticos o espacios de nombres – Charlie

+1

Un buen enfoque en un idioma no es necesariamente el mejor enfoque en otro. –

+0

El equivalente de los métodos estáticos de C++ es un método de clase (métodos que comienzan con '+' en lugar de '-'). Sin embargo, probablemente me apegaré solo a las funciones habituales o quizás categorías. –

6

Usted tiene algunas opciones:

  • El enfoque más simple es tener una colección de funciones C para tareas comunes (si utiliza una extensión .m, puede utilizar objetos Objective-C dentro de sus funciones C) Desde su código, por ejemplo, podría llamar al showAlertDialog().
  • Puede tener una "clase de utilidad" con varios métodos de clase que importa a cada archivo. Entonces, por ejemplo, puedes llamar al +[MyUtilities showAlertDialog]. Este es el equivalente más directo a las clases de utilidad estática en, por ejemplo, Java, pero es un poco torpe en Objective-C.
  • La otra opción, como dijo Paul Lynch, es usar categorías para extender las clases comunes. El único problema con esto es que puede conducir a problemas de mantenimiento. También solo funciona para extender las clases ya existentes, y solo cuando no necesita acceso a ivars. Podría tener una categoría para NSObject que haría que los métodos sean accesibles desde todos sus objetos, pero recomiendo encarecidamente que no lo haga (podría provocar dolores de cabeza severos de mantenimiento).

Personalmente, uso una combinación de opciones 1 y 3. Cuando tengo una funcionalidad que está claramente vinculada a una clase existente particular, utilizo categorías. De lo contrario, utilizo las funciones C.

Cuestiones relacionadas