2012-10-20 11 views
9

Sto ottimizzando una transizione che sembra essere lenta sul mio dispositivo. Sto spingendo uno UIViewController da un altro quando è selezionata una riga di UITableView. C'è una pausa notevole dopo la selezione della riga e prima che la nuova vista venga spinta.Cosa può succedere tra viewWillAppear e viewDidAppear?

Alcune registrazioni indicano che tutto il mio codice è ragionevolmente veloce, dalla selezione di riga fino a viewWillAppear del controller push. Ma il tempo tra viewWillAppear e viewDidAppear viene registrato a circa 0,7 secondi.

La transizione stessa (credo) dovrebbe richiedere solo 0,3 secondi. Cosa potrebbe essere la contabilità per il resto?

Sto testando su un iPhone 4, quindi non mi aspetto le prestazioni migliori. Ma dovrei essere in grado di eguagliare le stesse prestazioni di altre app simili sullo stesso dispositivo, no?

+0

Potrebbe mostrare del codice? – Peres

+0

Hai sovrascritto il metodo layoutSubviews della visualizzazione dei controller? Se è così, hai una logica complessa? –

+0

@JackyBoy Non saprei cosa postare, dal momento che non sono sicuro di cosa viene eseguito tra i due. –

risposta

0

La transizione stessa (credo) dovrebbe richiedere solo 0,3 secondi. Cosa potrebbe essere la contabilità per il resto?

risorse sono solitamente consumati nei seguenti metodi: drawRect:, layoutSubviews, viewDidLoad, viewWillAppear:. Inoltre, il caricamento da NIB può richiedere molto tempo.

Dopo viewWillAppear:, iOS creerà un'istantanea della nuova (e probabilmente attuale) vista per eseguire animazioni fluide tra due schermi. Assicuratevi quindi che il disegno e il codice di layout per entrambe le viste del controller siano abbastanza veloci.

+0

Ho programmato il mio codice loadView e viewDidLoad (sto costruendo la vista a livello di codice) - questo è ciò a cui ti riferisci con il disegno e il codice di layout? –

+1

Le risorse sono normalmente consumate nei seguenti metodi: 'drawRect:', 'layoutSubviews',' viewDidLoad', 'viewWillAppear:'. Inoltre, il caricamento da NIB può richiedere molto tempo. – Stream

+0

Non ho modificato drawRect e layoutSubviews. viewDidLoad e viewWillAppear sono completi prima del ritardo che sto riscontrando. Il mio 0,7 sec è tra la fine di viewWillAppear e la fine di viewDidAppear. –

1

avevo una domanda simile un paio di settimane fa, e ho scritto un post su cosa ho trovato:

http://bradbambara.wordpress.com/2014/07/31/object-life-cycle-uiviewcontroller/

Il TL; versione DR è che iOS:

  • eseguire il layout della nuova scena
  • eseguire la transizione alla nuova scena (se si tratta di una transizione animata)

... quindi la mia ipotesi è che il ritardo potrebbe essere causato da una transizione particolarmente lunga o se si sta facendo un lavoro intensivo in termini di prestazioni nel codice del layout.

Problemi correlati