Normalmente evito el enfoque de diseño que implica 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 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 aplicaciones es un objeto que recibe notificaciones cuando el objeto UIApplication alcanza ciertos estados. En muchos aspectos, es un patrón de Observador especializado uno a uno.
Esto significa que el "área de preocupación" para AppDelegate está manejando estados especiales de aplicación UIA. Los más importantes de estos son:
- applicationDidFinishLaunching: - bueno para manejar la configuración y construcción al inicio
- applicationWillTerminate: - bueno para limpiar al final
Debe evitar poner otras funciones en AppDelegate ya que realmente no pertenecen allí. Dicha otra funcionalidad incluye:
- Datos del documento: debe tener un administrador de documentos singleton (para múltiples aplicaciones de documentos) o un documento singleton (para aplicaciones de un solo documento)
- Controladores de botón / tabla / vista, métodos de delegado de vista u otro manejo de vista (excepto para la construcción de la vista de nivel superior en applicationDidFinishLaunching :): este trabajo debe realizarse en las clases de controlador de vista respectivas.
Muchas personas agrupan estas cosas en su AppDelegate porque son flojos o piensan 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 se escala.
El delegado de su aplicación es el corazón de su aplicación. Es efectivamente su "controlador de programa".
El delegado de aplicaciones 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ía considerarse como la rutina "main ()" de su programa Cocoa.
fuente
@ Shivam, gracias.
Por lo que entiendo
appDelegate
, está cerca de lo queApplication
es en Android. ElviewDidLoad
,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 y las notificaciones que aparecen. Si necesita que su código haga algo especial cuandosystem
se producen estos eventos, debe escribir el código de los métodos.En Android usamos
onPause
,onDestroy
,onCreate
un poco de devolución de llamada métodos para manejar este tipo de eventos del sistema.fuente
onPause
,onCreate
y losonDestroy
métodos de Android son más similares a laviewDidDisappear
,viewDidLoad
métodos de ciclo de vida de una vista de Controlador de iOS. Si tiene que comparar, diría que laApplication
clase de Android estaría más cerca de laAppDelegate
de iOS.Espero que esto ayude un poco más ...
Los programadores nuevos en este lenguaje siempre tienen la misma pregunta: ¿el programa parte 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 siguiente función:
UIApplicationMain inicia el ciclo de ejecución de Cocoa Touch y la infraestructura de la aplicación que crea un
UIApplication
objeto. Nuestra aplicación necesita contenido, por lo que Objective-C utiliza un delegado para manejar esto. Es por eso que lo llamamos AppDelegate (actuar como delegado deUIApplication
). Implementamos algunos de los métodos opcionales de ese delegado y se comporta en consecuencia.fuente