2012-02-09 7 views
5

Para la mayoría de mis aplicaciones, he colocado toda la lógica en clases, que cada ViewController también obtendrá una referencia de la clase, o creará/liberará el objeto en sí.¿Está bien colocar la mayoría de la lógica y los modelos en la aplicaciónDelegate?

Acabo de comenzar a leer un libro en IOS, y al autor parece gustarle poner la aplicación lógica en la aplicaciónDelegate, y los controladores de vista simplemente transmiten las acciones a la aplicación. Elimine los métodos que hacen el trabajo real.

¿El autor solo hace esto porque son simples ejemplos o es algo que debería aprender y comenzar a hacer en mis aplicaciones?

+0

Me gusta la respuesta de LavaSlider aquí http://stackoverflow.com/questions/8421138/importing-appdelegate – Rhubarb

Respuesta

12

En primer lugar, ver What describes the Application Delegate best? How does it fit into the whole concept?

El delegado aplicación es el delegado para la aplicación. No es el lugar para guardar todo lo que no sabes dónde más poner. No es el lugar de almacenamiento para los globales. Es el delegado para el objeto UIApplication. Por lo tanto, es el lugar correcto para poner el código relacionado con el inicio de la aplicación, la terminación, el cambio hacia y desde el fondo, etc. Cosas que tienen que ver con la forma en que la aplicación se ajusta al sistema operativo.

El delegado de la aplicación es un controlador, por lo que no debería contener datos. Los datos van en el modelo. El delegado de la aplicación puede crear el modelo al inicio y entregarlo a otros controladores, pero no es la API para el modelo. A menudo, el modelo es un singleton en lugar de ser creado por el delegado de la aplicación. Ambos enfoques tienen ventajas.

La mayoría del código de ejemplo coloca el código del modelo en el delegado de la aplicación porque, para ejemplos simples, requiere un poco menos de código. Pero en los programas reales hace que la aplicación delegada sea demasiado complicada y perjudica significativamente la reutilización del código. El delegado de su aplicación generalmente debe ser bastante pequeño, y la mayoría de los métodos que contiene deben ser parte de <UIApplicationDelegate>.

+0

Quiero utilizar ManageObjectContext en todas partes en mi aplicación dependiente de datos principales. No puedo encontrar ninguna otra solución que implique la importación de Appdelegate en todas partes, para acceder a ella. ¿Hay otra salida? – Nil

+1

Mueva 'managedObjectContext' a otro lugar que no sea el delegado de la aplicación. Puede ser un singleton propio, o puede ser inyectado en objetos que lo requieren. Personalmente, lo inyecté en los objetos modelo que lo necesitan y dejo que los controladores de visualización lo busquen a través de un singleton 'ViewControllerServices'. Pero ese no es el delegado de la aplicación. –

+0

Tengo un singleton que administra el estado de la aplicación (información del usuario, configuración, otras preferencias del usuario). Creé una fuerte propiedad de managedObjectContext allí e inicialé esto en el código 'applicationDidFinishLaunching'. ¿Es este flujo óptimo? ¡Puedo usar managedObjectContext desde aquí en toda la aplicación! – Nil

3

Diría que se debe a que los ejemplos son probablemente simples. Para cualquier aplicación del mundo real razonablemente compleja, la clase de delegado de aplicaciones se volvería difícil de manejar muy pronto.

3

Técnicamente podría hacerlo. En términos de práctica de programación, no. Una vez que colocas muchas cosas en la aplicaciónDelegate, se volverá muy complicado. Mi consejo sería dejarlo en paz.

No necesita poner nada en la aplicaciónDelegar excepto las variables globales. Y si a veces lo necesitas, mi sugerencia sería utilizar algo más como el patrón singleton. En general, las variables globales no son buenas prácticas.

Espero que esto ayude.

Cuestiones relacionadas