天天看點

IOS中pushViewController:的卡頓問題

題記:在項目中遇到過這樣一個問題:點選tableview的一個cell,需要跳轉到下一個控制器,這個時候在tableview界面卡頓約1s才進入控制器頁面。針對這個問題,我做了排查,最終定位出問題所在,也漲了知識,在此記錄之。

首先,在tableview的didSelectRowAtIndexPath:方法中有push控制器:

[self.navigationController pushViewController:assetsVc animated:NO];
           

一般情況下push控制器沒什麼問題,關鍵在于,在assetsVc控制器中有一個動作執行需要800ms時間。

經過測試,把這個耗時的方法分别放在viewDidLoad、viewDidAppear裡面,tableview均會卡頓。

問題思考:assetsVc裡面的耗時操作為什麼會使tableview卡頓?

經過試驗發現,從tableview向assetsVc的頁面跳轉動作發生在assetsVc頁面加載完成之後,也就是說,在assetsVc執行完viewWillLoad、viewDidLoad、viewWillAppear、viewDidAppear、viewWillLayoutSubviews、viewDidLayoutSubviews之後,頁面才會跳轉。

解決辦法:

為了提升使用者體驗,讓剛才說的耗時操作異步執行就可以了。

繼續閱讀