2013-01-23 14 views

risposta

11

La regola semplice che utilizzo è questa. viewDidLoad è quando vengono caricate le risorse della vista. La vista non è ancora disegnata sullo schermo. Quindi i calcoli e il codice che riguardano la geometria e la grafica della vista non dovrebbero essere messi qui. Dovrebbero essere nel metodo viewWillAppear o viewDidAppear.

anche viewWillAppear può essere chiamato più volte

  1. Quando viene visualizzato e rimuovere
  2. Quando viene visualizzato e rimosso un/actionsheet/visualizzazione degli avvisi di vista di uiactivityController vista popover/modal.

Per questo motivo, viewWillAppear non deve contenere codici che richiedono più tempo per terminare. (almeno il codice in esecuzione sul thread principale). Né i codici devono essere eseguiti solo una volta per visualizzazione.

Ne sono più sicuro, ma questi sono semplici da ricordare e spero che questo aiuti.

4

viewDidLoad: caricoavvisi che una vista è terminata

viewWillAppear:Corre poco prima che i carichi di vista

viewDidLoad è cose che devi fare una volta. viewWillAppear viene chiamato ogni volta che viene visualizzata la vista. Dovresti fare le cose che devi fare una volta sola in viewDidLoad - come impostare i tuoi testi UILabel. Tuttavia, potresti voler modificare una parte specifica della vista ogni volta che l'utente può visualizzarla, ad es.l'applicazione iPod scorre i testi nuovamente all'inizio ogni volta che si passa alla vista "In riproduzione".

Tuttavia, quando si caricano oggetti da un server, è necessario considerare anche la latenza. Se impacchettate tutte le comunicazioni di rete in viewDidLoad o viewWillAppear, queste verranno eseguite prima che l'utente possa vedere la vista, con il conseguente possibile blocco della vostra app. Potrebbe essere una buona idea mostrare all'utente una vista non popolata con un indicatore di attività di qualche tipo. Quando hai finito con il tuo networking, che potrebbe richiedere un secondo o due (o potrebbe anche fallire - chissà?), Puoi popolare la vista con i tuoi dati. Buoni esempi su come ciò potrebbe essere fatto possono essere visti in vari client di Twitter. Ad esempio, quando visualizzi la pagina dei dettagli dell'autore in Twitterrific, la vista dice solo "Caricamento in corso ..." fino al completamento delle query di rete.

+0

buona spiegazione, solo che ho letto prima qui: http://stackoverflow.com/questions/1579550/uiviewcontroller-viewdidload-vs-viewwillappear-what-is-the-proper-division-of –