2011-06-23 9 views
7

He estado aprendiendo coredata haciendo un montón de aplicaciones de prueba simples basadas en la plantilla del controlador de navegación xcode con "uso de coredata" marcado.los beneficios de awakeFromNib?

El método awakeFromNib en el delegado de la aplicación ha sido una fuente de problemas para mí, porque estoy agregando otras vistas al controlador y cambiando la secuencia de carga, para que RootViewController sea una segunda o tercera opción.

He descubierto lo que awakeFromNib está haciendo, y lo he eliminado para que el delegado de la aplicación ya no esté vinculado a ninguna vista en particular. (Entonces, cuando quiera cargar RootViewController, lo cargaré como una vista normal y usaré su propio viewDidLoad para inicializar managedObjectContext para la vista).

Mi pregunta: ¿hay ganancias de rendimiento u otros beneficios al usar awakeFromNIb en AppDelegate? ¿o es solo otra forma de hacer lo mismo que estoy haciendo desde el método viewDidLoad?

Respuesta

5

Todos los métodos se disparan en diferentes momentos y en diferentes circunstancias.

awakeFromNib se invoca cuando el archivo de punta asociado a una clase se carga desde el disco. Cualquier clase que pueda poseer un plumín puede usarlo. viewDidLoad es utilizado solo por los controladores de visualización. Por lo general, también se llama cuando se carga desde el plumín, pero también se puede invocar mediante una vista creada en la memoria (circunstancia muy rara)

En cualquier caso, solo pone funcionalidad en la que solo desea ejecutar una vez cuando la instancia se carga primero. P.ej. un error común es poner código en viewDidLoad que debe ejecutarse cada vez que aparece la vista. Diga lo mismo que con la vista maestra que abre una vista de detalle y luego reaparece cuando se descarta la vista de detalles. Si el código para la vista maestra está en viewDidLoad, solo se ejecutará la primera vez que se cargue la vista maestra, pero no en ninguna de las siguientes veces en que la vista maestra desaparezca y vuelva a aparecer.

Por lo general, no inicializa ninguna otra vista ni hace mucho de lo que el delegado de la aplicación está despierto de la punta. Eso generalmente se realiza en applicationDidFinishLaunching.

+0

Ok, gracias. Solo me preocupaba deshacerme de awakeFromNib en el delegado de la aplicación y mover el código de inicialización a viewDidLoad podría degradar el rendimiento. – nick

Cuestiones relacionadas