¿Para qué sirve AppDelegate y cómo sé cuándo usarlo?

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 progtwigción como Python o PHP que utiliza un patrón similar a AppDelegate?

Normalmente evito el enfoque de diseño implicado por el uso de 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 progtwig 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. Los más importantes de estos son:

  • applicationDidFinishLaunching: – bueno para manejar la configuración y la construcción en el inicio
  • applicationWillTerminate: – bueno para limpiar al final

Debería evitar poner otras funciones en AppDelegate, ya que no pertenecen realmente allí. Dicha otra funcionalidad incluye:

  • Datos del documento: debe tener un singleton del administrador de documentos (para varias aplicaciones de documentos) o un documento singleton (para aplicaciones de documentos únicos)
  • Controladores de botones / tablas / vistas, vista de métodos delegates 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 estos elementos en su AppDelegate porque son flojos o porque piensan que AppDelegate controla todo el progtwig. 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 progtwig”.

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.

Si bien no es exactamente similar, podrías pensar que es la rutina principal () de tu progtwig Cocoa.

Espero que esto ayude un poco más …

Los progtwigdores nuevos en este lenguaje siempre tienen la misma pregunta: ¿el progtwig comienza desde 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 siguiente función:

UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 

UIApplicationMain inicia el bucle de ejecución Cocoa Touch y la infraestructura de la aplicación 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 (actúa como delegado de UIApplication ). Implementamos algunos de los métodos opcionales de ese delegado y se comporta en consecuencia.

@Shivam, gracias.

Por lo que entiendo de appDelegate , está cerca de lo que es una Application en Android. viewDidLoad , viewDidDisappear es comparable con el 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 del system , entonces necesita escribir el código de los métodos.

En Android, usamos onPause , onPause , onDestroy , onCreate métodos de callback para manejar dichos eventos del sistema.