Estoy empezando a trabajar en aplicaciones para iPhone. ¿Cómo sé cuándo debería poner cosas en AppDelegate frente a una clase personalizada? ¿Existe una regla o algún tipo de analogía con otro lenguaje de programación como Python o PHP que utiliza un patrón similar a AppDelegate?¿Para qué sirve AppDelegate y cómo sé cuándo usarlo?
Respuesta
Normalmente evito el enfoque de diseño implícito en el uso que hace Andrew del término "corazón de su aplicación". Lo que quiero decir con esto es que creo que debería evitar agrupar demasiadas cosas en una ubicación central: un buen diseño de programa normalmente implica separar la funcionalidad por "área de preocupación".
Un objeto delegado es un objeto que recibe una notificación cuando el objeto al que está conectado alcanza ciertos eventos o estados. En este caso, el delegado de la aplicación es un objeto que recibe notificaciones cuando el objeto UIApplication alcanza ciertos estados. En muchos aspectos, es un patrón de Observador uno-a-uno especializado.
Esto significa que el "área de preocupación" para AppDelegate es el manejo de estados de aplicación UIA especiales. El más importante de estos son:
- applicationDidFinishLaunching: - bueno para el manejo de la configuración en el arranque y la construcción
- applicationWillTerminate: - bueno para la limpieza al final
Usted debe evitar poner otra funcionalidad en AppDelegate ya que realmente no pertenecen allí. Cualquier otra funcionalidad incluye:
-
datos
- Documento - usted debe tener un producto único gestor de documentos (para múltiples aplicaciones de documentos) o un producto único documento (para aplicaciones de documentos individuales) controladores
- Botón/tabla/vista, vista delegado métodos u otro manejo de vista (excepto para la construcción de la vista de nivel superior en applicationDidFinishLaunching :) - este trabajo debe estar en las respectivas clases de controlador de vista.
Muchas personas agrupan estas cosas en su AppDelegate porque son flojas o porque creen que AppDelegate controla todo el programa. Debe evitar la centralización en su AppDelegate, ya que enturbia las áreas de preocupación en la aplicación y no escala.
El delegado de su aplicación es el corazón de su aplicación. Es efectivamente su "Controlador de programa".
El delegado de aplicación es la clase que recibe mensajes a nivel de aplicación, incluido el mensaje applicationDidFinishLaunching más comúnmente utilizado para iniciar la creación de otras vistas.
Aunque no es exactamente similar, podría considerarse como la rutina "principal()" de su programa Cocoa.
Te doy +1 porque tener todos tus controladores de UI en AppDelegate es menos complicado que crear todas esas clases personalizadas para él. – rwols
@rwols tenga cuidado, separar sus preocupaciones ayuda a tener un código más limpio y es menos complicado depurarlo, debe tomarse el tiempo para crear esas clases personalizadas y no poner a todos sus observadores en un solo archivo. – wheeliez
Esperamos que esto ayude un poco más ...
programadores nuevos a este lenguaje siempre tienen la misma pregunta - lo hace el inicio del programa de un método principal? Sí, tienes razón en este caso; Las aplicaciones IOS también comienzan desde un método principal.
su clase principal llama a la función a continuación:
UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
UIApplicationMain da inicio a la infraestructura de bucle de ejecución y aplicación Cocoa Touch, que crea un objeto UIApplication
.Nuestra aplicación necesita contenido, por lo que Objective-c usa un delegado para manejar esto. Es por eso que lo llamamos AppDelegate (actuar como delegado de UIApplication
). Implementamos algunos de los métodos opcionales de ese delegado y se comporta en consecuencia.
por favor alguien me puede hacer entender lo que está mal en la respuesta anterior –
Parece confuso porque a) usted no usa la puntuación/ortografía/gramática adecuada, b) está fuera de tema, ya que realmente no responde pregunta el cartel original preguntado. – Kay
@Shivam, gracias.
Por lo que entiendo de appDelegate
, está cerca de lo que es Application
en Android. El viewDidLoad
, viewDidDisappear
es comparable al Ciclo de vida de Android. Cada aplicación tiene un ciclo de vida, desde el lanzamiento hasta las interrupciones de las llamadas entrantes, hasta las notificaciones que se muestran. Si necesita que su código haga algo especial cuando ocurren estos eventos system
, debe escribir el código de los métodos.
En Android utilizamos , onDestroy
, onCreate
como métodos de devolución de llamada para manejar dichos eventos del sistema.
Los métodos 'onPause',' onCreate' y 'onDestroy' de Android son más similares a los métodos' viewDidDisappear', 'viewDidLoad' del ciclo de vida de un Controlador de Vista de iOS. Si tiene que comparar, yo diría que la clase 'Application' de Android estaría más cerca del' AppDelegate' de iOS. –
Gracias, si puedes mejorar mi respuesta, por favor hazlo. Eliminaré mi respuesta después de leer la tuya. – Siddharth
- 1. ¿Para qué sirve XML y cuándo debería usarlo?
- 2. python y ruby: ¿para qué usarlo?
- 3. ¿Cuándo usar == y cuándo usarlo?
- 4. ¿Para qué es <spring:bind>? ¿Cuándo usarlo y cuándo no usarlo?
- 5. ¿Qué es ICustomTypeDescriptor y cuándo usarlo?
- 6. ¿Qué es Request.InputStream y cuándo usarlo?
- 7. ¿Qué es __declspec y cuándo debo usarlo?
- 8. ¿Cómo sé cuándo indexar una columna y con qué?
- 9. ¿Qué es el bean scope y cuándo usarlo?
- 10. ¿Para qué sirve Enum?
- 11. explicación de D_GNU_SOURCE ¿Por qué usarlo y cuándo?
- 12. ¿Para qué sirve UnmanagedMemoryStream?
- 13. ¿Qué es un simulacro y cuándo deberías usarlo?
- 14. ¿Qué es la delegación? ¿Cuándo querría usarlo?
- 15. ¿Para qué sirve PowerShell?
- 16. ¿Qué es JSR y para qué sirve?
- 17. CompositeWPF: EventAggregator: ¿cuándo usarlo?
- 18. ¿Qué es un ÍNDICE ESPACIAL y cuándo debería usarlo?
- 19. ¿Qué es un MvcHtmlString y cuándo debería usarlo?
- 20. ¿Qué es un MQ y por qué quiero usarlo?
- 21. ¿Para qué sirve __path__?
- 22. ¿Qué significa "sin firmar" en MySQL y cuándo usarlo?
- 23. @ModelAttribute anotación, ¿cuándo usarlo?
- 24. ¿Para qué sirve SDKDDKVer.h?
- 25. query_cache_min_res_unit; ¿Qué es y para qué sirve?
- 26. ¿Para qué sirve org.springframework.orm.hibernate3.support.BlobByteArrayType?
- 27. ¿Para qué sirve Automapper?
- 28. System.Web.Abstractions: ¿para qué sirve?
- 29. Google App Engine: cuándo usarlo, cuándo no?
- 30. Cakephp, ¿para qué sirve?
Matt, la última oración no tiene sentido. – Abizern
Lo siento, Abizern. He arreglado la redacción, ahora. –
+1 Esta es una respuesta excelente. Estaba mirando un código de ejemplo que tenía subvistas. Llamada a la aplicación Delegar para indicarle a un controlador de vista que cambie a una subvista diferente, y eso se sintió como un olor a código. Es bueno saber que mi nariz todavía funciona. – Alan