2011-10-17 10 views
7

No entiendo el mecanismo de la función loadView: (esta función se encuentra en UIView).loadView: funciones en UIView iOS

creé un proyecto de la siguiente manera:

  • En primer lugar, he creado proyecto basado en la ventana de un iPhone.
  • A continuación, he creado una subclase UIView
  • A continuación, he creado una subclase UIViewController, sin xib.
  • Por último, en la función loadView: de la clase I creada en el tercer paso, designo el objeto UIView (en la clase I creada en el segundo paso) como la variable de vista del objeto UIViewController (en el tercer paso).

Si Omito el último paso, y colocar la declaración NSLog(@"test LoadView"); en el loadView: función, a continuación, cuando se ejecuta el proyecto, la declaración NSLog(@"test LoadView"); se invoca de forma continua, como resultado de la carrera es de desbordamiento.

¡Por favor, explícame! ¡Gracias!

Respuesta

15

loadView: solo se invoca cuando la propiedad de vista es nil. Úselo cuando cree vistas programáticamente. default: crea un objeto UIView sin subvistas. Para ex -

- (void)loadView 
{ 
    UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame]; 
    [view setBackgroundColor:color]; 
    self.view = view; 
    [view release]; 
} 

Al implementar el método loadView:, puede enchufarse en el comportamiento de la gestión de memoria predeterminada. Si la memoria es baja, un controlador de vista puede recibir el mensaje didReceiveMemoryWarning. La implementación predeterminada comprueba si la vista está en uso. Si su vista no está en la jerarquía de vista y el controlador de vista implementa el método loadView:, se libera su vista. Más tarde, cuando se necesita la vista, se invoca el método loadView: nuevamente para crear la vista.

No sé por qué desea utilizar loadView: pero se puede hacer tanto en viewDidLoad:

Referencia -

  1. Why is this iPhone program not calling -loadView?
  2. loadView

Espero que esto ayude.

+0

¡Gracias por su ayuda! Tengo una pregunta: en el caso de que el controlador de visualización use el archivo nib y las variables de IBOutlet para organizar vistas, si recibe el mensaje didReceiveMemoryWarning, de todos modos hay versiones para liberarlas, luego cargue más adelante cuando sea necesario. ¡Gracias! –

+0

Sí por supuesto. siempre y cuando haya declarado sus elementos de la interfaz de usuario como 'retener'. Consulte aquí para obtener más información: http://stackoverflow.com/questions/1250518/what-happens-if-i-dont-retain-iboutlet –

+0

Estimado Srikar: No sé cómo recargar el archivo de punta a la variable IBOutlet después de liberarlo. ¿Y en qué estado está la variable IBOutlet cuando se vuelve a cargar? ¡Gracias por tu ayuda! –

Cuestiones relacionadas