天天看点

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之后,页面才会跳转。

解决办法:

为了提升用户体验,让刚才说的耗时操作异步执行就可以了。