A veces uso Singleton (para almacenar datos que utilizan varias clases diferentes) en mis proyectos y estoy pensando por qué no uso mi AppDeletage, ya que es un Singleton y de fácil acceso. ¿Es esta una mala práctica? Si es así, ¿por qué?¿Es una mala práctica usar su AppDelegate como Singleton?
Respuesta
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.
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.
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.
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.
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.
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
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. –
- 1. ¿Es una mala práctica usar el módulo requireJS como singleton?
- 2. es @unlink una mala práctica?
- 3. ¿Qué es una mala práctica al usar los parámetros?
- 4. ¿Es una mala práctica usar Reflection in Unit testing?
- 5. ¿Es una mala práctica usar variables temporales para evitar escribir?
- 6. ¿Es una mala práctica usar uno mismo en decoradores?
- 7. ¿Es una mala práctica usar las características C en C++?
- 8. ¿Es una mala práctica usar muchos viewmodels en asp.net mvc
- 9. ¿Es una mala práctica usar getattr de python extensivamente?
- 10. conexión de base de datos de php singleton, ¿es este código una mala práctica?
- 11. ¿Es una mala práctica escribir a $ _POST?
- 12. ¿Se considera una mala práctica usar atributos HTML no estándar?
- 13. ¿Es una mala práctica tener estado en una clase estática?
- 14. ¿Es una mala práctica poner usuarios externos en Active Directory?
- 15. ¿Es una mala práctica usar el valor ordinal de Enum para indexar una matriz en Java?
- 16. ¿Es una mala práctica para un objeto secundario tener un puntero a su elemento primario?
- 17. ¿La mala práctica de "arrojar excepciones" es?
- 18. ¿Es una mala práctica generar aleatoriamente datos de prueba?
- 19. ¿Por qué es -compile (export_all) una mala práctica?
- 20. Javascript ¿por qué FOR IN es una mala práctica?
- 21. ¿Es una mala práctica utilizar matrices multidimensionales en C/C++?
- 22. ¿El uso de procedimientos almacenados es una mala práctica?
- 23. ¿Es este patrón de singleton C# modificado una buena práctica?
- 24. ¿La palabra clave "con" Delphi es una mala práctica?
- 25. ¿Es esto una mala práctica sobrecargar un método?
- 26. ¿En general es una mala práctica tener muchos parámetros "initWith"?
- 27. ¿Es una mala práctica agregar propiedades a los nodos DOM?
- 28. ¿Es una mala práctica escribir manipuladores de eventos en línea
- 29. ¿Los argumentos NULL son una mala práctica?
- 30. ¿Es una mala práctica declarar el ctor de una clase como 'final' en PHP?
¿Cómo accedería directamente a AppDelegate de otras clases? Por ejemplo, acceda a una propiedad o algo similar – darksky
Para obtener acceso de tipo escrito a su delegado, llame a YourAppDelegate * delegate = (YourAppDelegate *) [UIApplication sharedApplication] .delegate; – ageektrapped
, entonces, ¿está bien importar Appdelegate en varios viewcontrollers? Si no, apúnteme en alguna parte que lo explique – Nil