如何优化iOS端app启动时间

864 阅读3分钟

iOS启动分为冷启动和热启动:

冷启动是app进程不在操作系统中,是全新的一次启动,需要系统新分配一个进程分配给他启动的情况

热启动是用户从将app退出后台,在app的进程还在系统的情况下,重新启动进入app的过程,不是一次完整的启动,所做的事情比较少

本文指的优化app是优化冷启动的启动时间

启动时间大致可分为三部分:main-pre(main函数之前),main到appdelegate,首页渲染时间

首先谈一下main-pre部分,这一部分主要的工作的:

1、加载可执行文件(即是.o文件)

2、加载动态链接库,进行rebase指针调整和bind符号绑定

3、注册类、类别和selector的唯一性检查

4、初始化,包括执行+load操作

5、加载xib等资源文件

获取启动前时间,可以在edit scheme ->run -> arguments中的environment variables中加入DYLD_PRINT_STATISTICS参数,value值设置为1,最后在控制台中打印出以下结果:

针对main_pre过程中完成的工作我们可以这样来优化:

1、尽量减少工程文件,删掉没必要的或者没用到的一些源文件

2、尽量减少动态库的引入,如果实在需要,则可以将多个动态库合并成一个,苹果官方规定最多可将6个动态库合并成一个

3、尽量减少+load方法的引用,如果可能的话到initzation中去完成初始化,这样只有在用到这个类的时候才会执行其方法

4、尽量避免复杂的xib文件,采用苹果推荐的storyboard或者纯代码的形式进行布局,个人推荐如果是多人开发的话采用纯代码的方式更易维护

接下来,我们谈谈main到appdelegate过程中做了哪些工作:

其主要是main函数委托appdelegate执行didfinish方法,所以一般是在这些方法中进行优化,在这个方法中,我们要注意以下几点:

1、避免使用同步操作去初始化一些数据

2、尽量避免在主线程中执行大量的I/O操作,如果可能的话,可以在异步线程中去执行这些操作,或者将这些操作移到首页的viewDidApear等已经启动完成之后再去执行

关于这段时间的统计方法,可以在didfinish之前打印一个时间戳,执行完成之后再打印一个时间戳,这两个时间戳的差值就是其的执行时间

最后回到首页的渲染上来,首页渲染同样需要避免以上两点,同时需要避免离屏渲染,这样在两个屏幕缓冲区来回切换也十分影响app的性能

以上是我对优化app启动时间的一些个人看法,各位如果有补充可以给我提一些建议




 小编这呢,给大家推荐一个优秀的iOS交流平台,平台里的伙伴们都是非常优秀的iOS开发人员,我们专注于技术的分享与技巧的交流,大家可以在平台上讨论技术,交流学习。欢迎大家的加入(想要进入的可加小编微信 )。微信号:17336563535

来源:本文为第三方转载,如有侵权请联系小编删除。