iOS App启动优化(一)

一、“冷启动”与“热启动”

冷启动
App点击启动前,此时App的进程还不在系统里。
需要系统新创建一个进程分配给App。(这是一次完整的App启动过程)

热启动
App在冷启动后用户将App退回后台,此时App的进程还在系统里。
用户重新返回App的过程。(热启动做的事较少)

二、App的完整启动流程(冷启动流程)

1、main() 函数执行前(pre-main阶段)

我们可以通过设置环境变量DYLD_PRINT_STATISTICS来起到监控main() 函数执行前启动时间

打印出来时间解释如下:

  • dylib loading time:动态库的载入耗时,苹果建议项目中自定义的动态库最好不要超过6个动态库,如果超过了6个要考虑动态库合并;
  • rebase/binding time:偏移修正(rebase)和符号绑定(binding)的耗时;偏移修正是一个安全机制--ASLR,原理是生成一个随机值,加到应用内存地址的前面,来起到方法、函数的地址随机的目的,解决安全问题.所有的方法、函数和数据的内存地址都会在原有的真实地址上加上这个随机值,并且每次启动的时候这个随机值是不同的,这样别人就没法拿到方法、函数或数据的真实地址了;符号绑定是指将方法名与方法的实现,即sel和IMP的绑定。
  • ObjC setup time:Object-C类的注册的耗时;不权威统计,每增加20000个类,这个时间增加800ms;减少类的数量可以减少启动耗时;
  • initializer time:load方法和构造方法的耗时.所以项目中要尽量减少重写load 方法,将load方法的操作放在initialization中.

2、main() 函数执行后(从main函数执行,到didFinishLaunchWithOptions方法作用域结束

    优化方向:

  • 减少数据的加载,最好使用懒加载,如一个第三文库的加载;
  • 将项目中不再使用的类和方法去掉;
  • 使用多线程技术加载数据,充分利用cpu的资源;
  • 启动时刻的界面,不要使用storyboard或xib,尽量使用纯代码,因为storyboard或xib有一步代码转换的操作,也是会耗时的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值