¿Qué describe mejor al delegado de la aplicación? ¿Cómo encaja en todo el concepto?

Creo que para saber lo que hace el delegado de la aplicación. Tiene algunos buenos métodos como -applicationDidFinishLaunching que se -applicationDidFinishLaunching cuando la aplicación haya terminado de ejecutarse, y así sucesivamente. Pero, ¿qué es eso en realidad? ¿Es algún objeto instanciado en la función UIApplicationMain ?

¿Y cómo funciona que todas las clases de mi aplicación tengan acceso a ese objeto delegado de la aplicación? ¿Hay algún buen gráfico en la red que visualice estas relaciones?

En Cocoa, un delegado es un objeto al que otro objeto hace referencia en cuestiones de comportamiento e informa sobre cambios en su estado. Por ejemplo, un UITableViewDelegate es responsable de responder preguntas sobre cómo debe comportarse UITableView cuando se realizan selecciones o se reordenan las filas. Es el objeto que UITableView pregunta cuándo quiere saber qué tan alta debe ser una fila en particular. En el paradigma Modelo-Vista-Controlador, los delegates son Controladores y muchos nombres de delegates terminan en “Controlador”.

A riesgo de afirmar lo obvio, UIApplicationDelegate es el delegado de la aplicación UIA. La relación es un poco más obvia en Cocoa (Mac) que en Cocoa Touch (iPhone), ya que el delegado de NSApplication puede controlar el comportamiento de NSApplication más directamente (evitando que la aplicación termine, por ejemplo). iPhone no permite mucho control sobre la aplicación UIA, por lo que principalmente UIApplicationDelegate está informado de los cambios en lugar de tener un proceso activo de toma de decisiones.

UIApplicationDelegate no está estrictamente disponible desde cualquier lugar de la aplicación. La aplicación UIA singleton es ([UIApplication sharedApplication]) y, a través de ella, puede encontrar su delegado. Pero esto no significa que sea apropiado para cada objeto en una aplicación hablar directamente con el delegado de la aplicación. En general, desanimo a los desarrolladores de tener objetos aleatorios para hablar con el delegado de la aplicación. La mayoría de los problemas que se resuelven de esa manera se resuelven mejor a través de Singletons, NSNotification u otros objetos de delegado.

En cuanto a su creación, en Mac no hay nada mágico sobre el delegado de la aplicación. Es solo un objeto instanciado y cableado por el NIB en la mayoría de los casos. En el iPhone, sin embargo, el delegado de la aplicación puede ser un poco mágico si lo instancia con UIApplicationMain (). El cuarto parámetro es un NSString que indica la clase del delegado de la aplicación, y UIApplicationMain () creará uno y lo establecerá como el delegado de la aplicación compartida. Esto le permite configurar el delegado sin un NIB (algo muy difícil en Mac). Si el cuarto parámetro para UIApplicationMain () es nulo (como lo es en las plantillas de Apple), entonces el delegado se crea y cablea por el NIB principal, al igual que la ventana principal.

El objeto se instancia de esta manera;

La función principal busca el conjunto de plumillas principal en info.plist. El plumín tiene como delegado de aplicación que se establece en alguna clase que debe implementar UIApplicationDelegates y sus métodos requeridos. El delegado de la aplicación carga un viewcontroller.

Sirve como un objeto de callback de aplicación amplia para eventos que afectan a toda la aplicación, como la memoria baja, etc.