2012-10-20 59 views
9

我正在優化在我的設備上似乎很慢的轉換。當選擇UITableView的行時,我正在從另一個UIViewController中推送一個UIViewController。行選擇後,新視圖被按下之前,會有明顯的暫停。viewWillAppear和viewDidAppear之間會發生什麼?

某些日誌記錄表明我的所有代碼都是相當快的,從行選擇到按下控制器的viewWillAppear。但之後viewWillAppearviewDidAppear之間的時間約爲0.7秒。

過渡本身(我相信)應該只需要0.3秒。剩下的可能是什麼?

我在iPhone 4上測試,所以我並不期待最快樂的表現。但是,我應該能夠在同一臺設備上匹配其他類似應用的相同性能,不是嗎?

+0

你能展示一些代碼嗎? – Peres

+0

您重寫了控制器視圖的layoutSubviews方法嗎?如果是這樣,那麼你有複雜的邏輯嗎? –

+0

@JackyBoy我不知道該發佈什麼,因爲我不確定兩者之間正在執行什麼。 –

回答

0

過渡本身(我相信)應該只需要0.3秒。剩下的可能是什麼?

資源通常消耗下面的方法:drawRect:layoutSubviewsviewDidLoadviewWillAppear:。另外,從NIB加載可能需要相當多的時間。

viewWillAppear:之後,iOS將爲新的(可能是當前的)視圖製作一個快照,以在兩個屏幕之間執行流暢的動畫。因此,確保兩個控制器視圖的圖形和佈局代碼足夠快。

+0

我已經定時了我的loadView和viewDidLoad代碼(我以編程方式構建視圖) - 這是你所指的繪圖和佈局代碼? –

+1

資源通常在以下方法中使用:'drawRect:','layoutSubviews','viewDidLoad','viewWillAppear:'。另外,從NIB加載可能需要相當多的時間。 – Stream

+0

我還沒有改變drawRect和layoutSubviews。 viewDidLoad和viewWillAppear在我遇到的延遲之前完成。我的0.7秒是在視角結束和視角結束之間出現。 –

1

我有一個類似的問題在幾個星期前,我寫了一篇博客文章是我的發現:

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

的TL; DR版本是iOS版將:

  • 執行新場景的佈局
  • 執行轉換到您的新場景(如果它是動畫過渡)

...所以我的猜測是延遲可能是由一個特別長的轉換引起的,或者如果您在佈局代碼中執行任何性能密集型工作。

相關問題