最近优化了一个问题,app启动时从广告页进入主界面时卡顿,app启动时是一个launch vc ,然后其上有个跳过按钮,点击之后利用nav 的 setViewControllers把main vc设置成根vc,但是由于main vc的xib加载比较耗时就出现了点击跳过时没反应的情况(其实就是main vc在加载xib view),而且在main vc还没显示出来时还能点击到main vc上的按钮,这个问题比较严重,会让人误以为是bug,所以优化了一下,想办法让main vc提前加载view。
解决方案也很简单,在launch vc中创建一个全局变量main vc,在viewDidLoad方法中初始化,然后调用main vc的loadViewIfNeeded就可以了。
说明:controller的view是懒加载,只要触发了view的getter方法,那么就会触发controller的viewDidLoad方法,因此在还没有push到某个controller之前如果使用了controller.view那么就会触发其viewDidLoad方法,当然 此时直接使用controller的loadViewIfNeeded方法很合适。
loadViewIfNeeded
Loads the view controller’s view if it has not yet been loaded.
相关方法:beginAppearanceTransition:animated: 、endAppearanceTransition (自定义controller时会使用到的方法,也是主动触发一些生命周期方法的,可在官方文档查看其说明)。