2009-05-06 9 views
14

Bueno, creo que saber lo que hace el delegado de la aplicación. Tiene algunos buenos métodos como -applicationDidFinishLaunching que se ejecutará 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?¿Qué describe mejor al delegado de la aplicación? ¿Cómo encaja en todo el concepto?

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

Respuesta

34

En cacao, un delegado es un objeto que otro objeto se remite a las cuestiones de comportamiento y 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 delegados son Controladores y muchos nombres de delegados terminan en "Controlador".

A riesgo de afirmar lo obvio, el 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.

+1

Gracias por la información, Rob! ¿Seguro que no eres el mejor ingeniero de manzana? ;) – Thanks

3

El objeto está instanciado 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 una amplia objeto de devolución de llamada solicitud de acontecimientos que afectan a toda la aplicación, tales como poca memoria, etc.

Cuestiones relacionadas