2011-07-15 14 views

Respuesta

10

No hay derecho respuesta a esta. Obtendrás muchas opiniones sobre esto. No veo ningún problema con el uso del AppDelegate, y lo hago por todos mis aplicaciones:

  • El delegado es prácticamente obligatoria para las aplicaciones del iPhone,
  • que está ahí para el tiempo de vida de la aplicación;
  • y se puede acceder desde cualquier lugar del programa (¡aunque no abuse de eso!).

Sin embargo, uno debe permanecer vigilante, por lo que el código que no necesariamente tiene que estar allí, no está allí. No desea que su AppDelegate se vuelva masivo y no se pueda mantener.

La pregunta ha sido respondida antes en StackOverflow:

Application Design and AppDelegate

Las respuestas en que pueden ayudar también.

+0

¿Cómo accedería directamente a AppDelegate de otras clases? Por ejemplo, acceda a una propiedad o algo similar – darksky

+1

Para obtener acceso de tipo escrito a su delegado, llame a YourAppDelegate * delegate = (YourAppDelegate *) [UIApplication sharedApplication] .delegate; – ageektrapped

+0

, entonces, ¿está bien importar Appdelegate en varios viewcontrollers? Si no, apúnteme en alguna parte que lo explique – Nil

4

AppDelegate debe manejar el comportamiento de la aplicación en los estados de inicio, entrada de fondo, etc. No debes hacerlo más complejo ya que no es un buen patrón de diseño. Pero siempre puede mantener una referencia a su clase de DataStore en su AppDelegate, y acceder a ella a través de AppDelegate. De esta forma abstrae el almacenamiento de datos de su AppDelegate, pero aún así podrá acceder fácilmente a él.

0

Bueno, en términos de abstracción de datos puede ser un poco inseguro, pero creo que también es un lugar útil en la memoria. Lo que debe hacer, puede ser encapsular las variables con métodos de acceso para que tenga un lugar donde hacer las operaciones relacionadas con la concurrencia (si hay)

Pero si lo que quiere decir es pasar objetos de una clase UI a otra, entonces probablemente deba usar algo más, como establecer variables miembro de una de la otra, o usar el almacén de datos, etc.

0

Para pequeñas partes del código del controlador que son relevantes para toda la aplicación, uso AppDelegate. Si hay una manera sensata de dividir el código en un objeto de controlador separado, sería preferible, ya que he visto delegados de aplicaciones que se han disparado a un tamaño inmanejable.

También puede ser una buena forma de 'unificar' los objetos del controlador, sin quemar los puentes si luego desea tener más de uno.

De hecho, me puso un método de clase en el AppDelegate para acceder a ella, por lo que puede hacer cosas como:

[[AppDelegate get].dataStore getRecordNumber:x] // or 
[[AppDelegate get].server refreshData] 

pero estoy seguro que no son los que creo que esto es un mal diseño en un ambiente de equipo.

3

Obtengo mucha gracia por esto, pero para los datos más pequeños que tienen relevancia global, no tengo ningún problema en mantenerme en el delegado de la aplicación.

Las piezas de datos más grandes necesitan una tienda que no tiene memoria (Core Data, el sistema de archivos, SQLlite, o lo que sea).

Mi primera aplicación tenía una TONELADA de datos chapoteando (texto en NSDictionaries, UIImages en varios tamaños, etc.). Creé un singleton de administración de datos para mantenerlo todo en un solo lugar y manejar las solicitudes de actualizaciones del servidor. Funcionó bien. Si supiera lo que sé ahora, probablemente habría elaborado una estrategia de sincronización de datos centrales.

+0

Realmente realmente depende: estoy escribiendo una aplicación de juego y necesito una clase única para administrar los puntajes, reproductores, etc. ... En este caso, Singleton funciona mejor que Core Data. Estoy escribiendo otra aplicación que en realidad almacena datos y descarga contenido en línea. En este caso, estoy usando Core Data. – darksky

+1

Sí, está bien también. También recibo bufidos por no ser incondicionalmente Anti-Singleton. Creo que es una buena herramienta que, como muchas buenas herramientas, tiene el potencial de ser mal utilizada. –

Cuestiones relacionadas