2011-10-17 1 views
7

Non capisco il meccanismo della funzione loadView: (questa funzione è in UIView).loadView: funzioni in UIView iOS

Ho creato un progetto come di seguito:

  • In primo luogo, ho creato progetto basato su finestra di un iPhone.
  • Poi, ho creato una sottoclasse UIView
  • Successivamente, ho creato una sottoclasse UIViewController, senza XI ter.
  • Infine, nella funzione loadView: della classe che ho creato nel terzo passaggio, ho designato l'oggetto UIView (nella classe che ho creato nel secondo passaggio) come variabile di vista dell'oggetto UIViewController (nel terzo passaggio).

Se Tralascio l'ultimo passo, e non metto la dichiarazione NSLog(@"test LoadView"); nella loadview: la funzione, poi, quando viene eseguito il progetto, la dichiarazione NSLog(@"test LoadView"); viene richiamato continuamente, provocare la corsa è troppo pieno.

Per favore spiegami! Grazie!

risposta

15

loadView: viene richiamato solo quando la proprietà view è nil. Usalo quando crei le viste a livello di programmazione. default: crea un oggetto UIView senza subviews. Per ex -

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

Con l'implementazione del metodo loadView:, si aggancia sul comportamento di gestione della memoria di default. Se la memoria è bassa, un controller di visualizzazione potrebbe ricevere il messaggio didReceiveMemoryWarning. L'implementazione predefinita controlla se la vista è in uso. Se la sua vista non è nella gerarchia della vista e il controller della vista implementa il metodo loadView:, la sua vista viene rilasciata. Successivamente, quando è necessaria la vista, viene richiamato il metodo loadView: per creare la vista.

Non certo perché si desidera utilizzare loadView: ma si può fare altrettanto in viewDidLoad:

Riferimento -

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

Spero che questo aiuti.

+0

Grazie per il vostro aiuto! Ho una domanda: nel caso in cui il controller di visualizzazione utilizzi il file pennino e le variabili IBOutlet per organizzare le visualizzazioni, se riceve il messaggio ricevutoReceiveMemoryWarning, è comunque disponibile per rilasciare le viste, quindi caricarle in seguito quando necessario. Grazie! –

+0

Sì, naturalmente. a condizione che tu abbia dichiarato i tuoi elementi ui come 'retain'. Vedi qui per ulteriori informazioni - http://stackoverflow.com/questions/1250518/what-happens-if-i-dont-retain-outoutlet –

+0

Gentile Srikar, non conosco il modo di ricaricare il file pennino nella variabile IBOutlet dopo averlo rilasciato. E quale stato è la variabile IBOutlet quando viene ricaricato? Grazie per l'aiuto! –