2012-10-20 5 views
9

Optymalizuję przejście, które wydaje się być wolne na moim urządzeniu. Przesyłam jeden UIViewController z innego, gdy wybrany jest wiersz UITableView. Po wyborze wiersza występuje zauważalna pauza i przed włożeniem nowego widoku.Co może się zdarzyć między viewWillAppear i viewDidAppear?

Niektóre rejestrowanie wskazuje, że cały mój kod jest dość szybki, od wyboru wiersza do pchniętego kontrolera viewWillAppear. Ale wtedy czas pomiędzy viewWillAppear i viewDidAppear jest rejestrowany około 0,7 sekundy.

Samo przejście (jak sądzę) powinno zająć tylko 0,3 sekundy. Co może stanowić rozliczenie dla pozostałej części?

Testuję na iPhonie 4, więc nie spodziewam się najgorszej wydajności. Ale powinienem być w stanie dorównać tej samej wydajności innych podobnych aplikacji na tym samym urządzeniu, prawda?

+0

Czy możesz pokazać kod? – Peres

+0

Czy zastąpiłeś metodę layoutSubviews w widoku kontrolerów? Jeśli tak, to czy masz złożoną logikę? –

+0

@JackyBoy Nie wiedziałbym, co publikować, ponieważ nie jestem pewien, co jest wykonywane między tymi dwoma. –

Odpowiedz

0

Samo przejście (jak sądzę) powinno zająć tylko 0,3 sekundy. Co może stanowić rozliczenie dla pozostałej części?

Zasoby są zwykle spożywane w następujących metod: drawRect:, layoutSubviews, viewDidLoad, viewWillAppear:. Ponadto ładowanie z NIB może wymagać dłuższego czasu.

Po viewWillAppear: system iOS tworzy migawkę nowego (i prawdopodobnie bieżącego) widoku, aby wykonać płynną animację między dwoma ekranami. Dlatego upewnij się, że rysunek i kod układu dla obu widoków kontrolera jest wystarczająco szybki.

+0

Mam na czasie mój loadView i viewDidLoad kod (Buduję widok programowo) - jest to, co masz na myśli, rysując i kodu układu? –

+1

Zasoby są zwykle używane w następujących metodach: 'drawRect:', 'layoutSubviews',' viewDidLoad', 'viewWillAppear:'. Ponadto ładowanie z NIB może wymagać dłuższego czasu. – Stream

+0

Nie zmieniłem drawRect i layoutSubviews. viewDidLoad i viewWillAppear są kompletne przed opóźnieniem, którego doświadczam. Moje 0,7 s znajduje się między końcem viewWillAppear a końcem viewDidAppear. –

1

miałem podobne pytanie kilka tygodni temu, a ja napisałem na blogu o tym, co znalazłem:

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

TL; wersja DR jest, że iOS będzie:

  • wykonaj układ nowej sceny
  • Wykonaj przejście do nowej sceny (jeśli jest to animowane przejście)

... więc domyślam się, że opóźnienie może być spowodowane szczególnie długim przejściem lub jeśli wykonujesz jakąkolwiek pracę wymagającą dużej wydajności w swoim kodzie układu.