Diferencia entre viewDidAppear, viewDidLoad en iPhone / iOS?

En resumen, he estado trabajando en una aplicación, y parece que si UIAlert un UIAlert en viewDidLoad , se llamará dos veces (a partir de un método de delegado de UIImagePickerController ). Si lo pongo en viewDidAppear , se llamará una vez.

He revisado la documentation pero me confunde.

Un object UIView puede cargarse en la memory y liberarse varias veces sin agregarse nunca a la stack de visualización y aparecer en la pantalla.

Mi conjetura es que tiene 2 references a esta vista (¿tal vez una en un file de nib?), Por lo que se está cargando, luego se libera cuando se carga la segunda reference y se asigna a la misma propiedad, solo se agrega esta última a la vista astackr. Puede ver esto imprimiendo (NSLog) el valor integer de self ("% ld", (long int) self) en los methods viewDidLoad y viewDidAppear.