Pregunta

Creo saber lo que hace el delegado de aplicaciones. Tiene algunos buenos métodos como -applicationDidFinishLaunching que se llamará cuando la aplicación haya terminado de iniciarse, 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 aplicaciones? ¿Hay algún buen gráfico en la red que visualice estas relaciones?

¿Fue útil?

Solución

En Cocoa, un delegado es un objeto al que otro objeto difiere 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 el UITableView cuando se realizan selecciones o se reordenan las filas. Es el objeto que el UITableView pregunta cuando quiere saber qué tan alto debe ser una fila en particular. En el paradigma Modelo-Vista-Controlador, los delegados son Controladores, y los nombres de muchos delegados terminan en "Controlador".

A riesgo de decir lo obvio, UIApplicationDelegate es el delegado de UIApplication. 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 finalice, por ejemplo). iPhone no permite mucho control sobre la aplicación UIA, por lo que la mayoría de las veces se informa a UIApplicationDelegate de los cambios en lugar de tener un proceso activo de toma de decisiones.

El UIApplicationDelegate no está estrictamente disponible en todas partes 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 que cada objeto en una aplicación hable directamente con el delegado de la aplicación. En general, desaliento a los desarrolladores de que los objetos aleatorios hablen con el delegado de la aplicación. La mayoría de los problemas que se resuelven de esa manera se resuelven mejor mediante Singletons, NSNotification u otros objetos delegados.

En cuanto a su creación, en Mac no hay nada mágico en el delegado de la aplicación. Es solo un objeto instanciado y conectado por la NIB en la mayoría de los casos. Sin embargo, en el iPhone, el delegado de la aplicación puede ser un poco mágico si UIApplicationMain () lo instancia. 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 sharedApplication. Esto le permite configurar el delegado sin una NIB (algo muy difícil en Mac). Si el cuarto parámetro para UIApplicationMain () es nulo (como en las plantillas de Apple), el delegado es creado y conectado por la NIB principal, al igual que la ventana principal.

Otros consejos

El objeto se instancia de esta manera;

La función main busca la plumilla principal establecida en info.plist. La punta tiene como delegado de la aplicación que se establece en alguna clase que debe implementar UIApplicationDelegates y sus métodos necesarios. El delegado de la aplicación carga un poco de viewcontroller.

Sirve como un objeto de devolución de llamada de toda la aplicación para eventos que afectan a toda la aplicación, como poca memoria, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top