Al trabajar con vistas y controladores de vista en una aplicación de iPhone, ¿alguien puede explicar la diferencia entre loadView y viewDidLoad?
Mi contexto personal es que construyo todas mis vistas desde el código, no uso y no usaré Interface Builder, si eso marca la diferencia.
He descubierto que a menudo cuando agrego código de inicio a loadView, termino con un seguimiento de pila infinito, por lo que normalmente hago todo mi edificio de vista de niño en viewDidLoad ... pero realmente no me queda claro cuándo se ejecuta cada uno, y cuál es el lugar más apropiado para poner el código de inicio. Lo que sería perfecto es un diagrama simple de las llamadas de inicialización.
¡Gracias!
fuente
-(void) loadView { // Frame for Hypnosis view CGRect frame = [[UIScreen mainScreen] bounds]; // Create a Hipnosis view v = [[HypnosisView alloc] initWithFrame:frame]; self.view = v;
loadView
es el métodoUIViewController
que realmente cargará la vista y la asignará a laview
propiedad. Esta es también la ubicación que una subclase deUIViewController
anularía si quisiera configurar programáticamente laview
propiedad.viewDidLoad
es el método que se llama una vez que se ha cargado la vista. Esto se llama después de que se llama loadView. Es un lugar donde puede anular e insertar código que realiza una configuración inicial adicional de la vista una vez que se ha cargado.fuente
debe usarse cuando carga su vista desde una NIB y desea realizar cualquier personalización después del lanzamiento
se utilizará cuando desee crear su vista mediante programación (sin el uso de Interface Builder)
fuente
Simplemente agregue algunos ejemplos de código para demostrar lo que dijo NilObject:
fuente
Para evitar que suceda un bucle infinito cuando lee self.view, llame a la súper implementación de la clase cuando carga una vista. La súper implementación asignará una nueva UIView para usted.
fuente
[super loadView];
. Eso se contradijo en los ejemplos, pero creo que los documentos lo dijeron correctamente (con el tiempo he encontrado numerosos errores en los ejemplos).[super loadView]
Sin embargo, es necesario para UITableViewController, etc. ¡Sin embargo! Cualquier configuración posterior a la carga (por ejemplo, agregar subvistas adicionales) debe hacerse en viewDidLoad.La forma más fácil de usar loadView es crear algún tipo de controlador de vista base, como MyBaseViewController, que es una subclase de UIViewController. En su método loadView, crea una vista de esta manera:
Y cuando necesita hacer un controlador de vista, simplemente usa la subclase de MyBaseViewController y en su controlador loadView simplemente llama [super loadView] de esta manera
fuente
loadView()
se llama cuando se le pide a su controlador que cree suself.view
. Puedes hacerlo solo comoO la clase UIController principal de su controlador ya tiene un nombre de método
-loadView()
que inicializa su self.view en una vista en blanco. Entonces puedes llamarRealmente recomiendo el segundo enfoque, ya que fomenta la herencia. Solo si su controlador de vista no se hereda directamente de UIViewController.
fuente
La definición dada por Apple en viewDidLoad menciona que se llama después de que la vista del controlador se carga en la memoria. Para ponerlo en un término simple, es el primer método que se cargará.
Quizás esté pensando en qué condiciones se utilizará este método por completo. La respuesta es, básicamente, lo que quiera que la aplicación cargue primero. Por ejemplo, es posible que desee un color de fondo diferente, en lugar de blanco, quizás podría elegir azul.
fuente