2013-07-30 76 views
0

當我的應用程序接收到新數據時,我的視圖控制器發出並接收通知。視圖控制器然後重新加載其tableview的其中一個部分。這通常只需要40毫秒左右。重新載入tableview部分時的性能問題

但是,如果我推送了另一個視圖,通知仍由原始控制器處理,但tableview的重新加載時間大約需要延長10-20倍。

我當然可以改善我的tableview性能,但首先我需要了解是什麼造成了這種情況。也將非常感謝使用儀器幫助我自己調試的一些幫助。到目前爲止,我已經運行'Time Profiler'工具,它看起來像大部分的努力都花費在系統方法'[UIView(Hierarchy) layoutIfNeeded]'中。這對我來說沒有多大意義。

+0

你還在調用reloadSections:withRowAnimation:在控制器不在屏幕上時的表視圖上? – rdelmar

+0

控制器仍然以正常的方式迴應這些通知,是的。這個想法是,如果用戶在其他地方發生了某些變化,則表視圖會更新。 –

+0

當視圖不在屏幕上時,我不確定這是個好主意。也許你可以將更新數據源(這將通過通知來完成)從表視圖的更新中分離出來,並且只有當視圖在屏幕上時才執行後者。 – rdelmar

回答

0

您絕對不需要更新不在屏幕上的元素的UI。 UI更新將發生在主線程中,這會對用戶體驗產生負面影響。

更新您的數據源(在後臺線程中)應該已經足夠了,然後您可以在下次向用戶顯示時更新tableview。

+0

如果這是我採取的方法,我想我只是退訂通知完全消失和重新訂閱出現。否則,我不得不圍繞一些邊緣情況進行編碼。但是我最想了解根本原因 - 爲什麼同樣的方法在屏幕和屏幕之間需要更長的時間。 –

+0

我想這是因爲當視圖不在屏幕上時,主線程被佔用,處理用戶交互並在顯示的視圖上進行UI更新,並且您的代碼也嘗試在主線程中運行。雖然沒有看到它,但是不能分辨。 – cmyr

相關問題