题记:在项目中遇到过这样一个问题:点击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之后,页面才会跳转。
解决办法:
为了提升用户体验,让刚才说的耗时操作异步执行就可以了。