ios-项目优化(启动优化)
一.冷启动和热启动
热启动是,APP会恢复之前的状态继续运行,这种就是热启动,我们平时所说的APP在后台的存活时间,其实就是APP能执行热启动的最大时间间隔。而冷启动则是APP从被加载到内存到运行的状态,下面我们要讲的主要是冷启动。
热启动:由于某种原因,APP 的状态由 running 切换为 suspend,但此时 APP 并没有被系统 kill掉,当我们再次把 APP 切换到前台的时候,此时启动 app 所需要的数据仍然在缓存中,再次启动的时候称为热启动。通常情况下热启动能帮助提升启动速度,但有时也可能会出现 app 卡死手动退出进程后重新打开仍然是卡死状态。
冷启动:如果是比较长时间没有启动过 app 或者设备刚刚重启,这种情况下启动 app,就被称为冷启动。
二.启动优化
一个app的冷启动,可以分为从main函数之前和main函数到我们自己界面显示出来这两个部分。
main函数之前是苹果系统给我们处理了问题并不是特别大,而在main函数之后的这些,都是我们自己来编写的,就会遇到各种初始化延迟 读取数据耗费时间。
1.main函数之后的优化
我们启动app到展示第一个视图,一般都集中在AppDelegate中的didFinishLaunchingWithOptions方法中。初始化window,初始化标签栏 导航栏的VC控制器视图。 获取数据,各种第三方的注册。
而针对这些,需要做的优化有:
1使用代码绘制UI,减少xib个storyboard。
2.延迟初始化和加载不必要的控制器和视图。
就像标签栏中的视图,例如有4个标签。完全可以只初始化默认选中的第一个标签。其他的控制器我们用懒加载的形式,在点击到这个标签的时候,在去初始化这个VC。
3.各种第三方sdk的注册登录,可以放在第一次进入的入口。这样就把这些sdk的注册登录分摊下来了,减少了启动的时间。
4.对于确实需要启动时使用但又比较耗时的事物放倒后台处理,如果涉及到 UI 则在处理完成后把刷新任务放回主线程。
日志功能,日志往往涉及到 DB 操作;
文件读取,比如读取本地存储的省份城市区县文件和图片处理;
大量的计算,比如图片处理,比较大的 json 数据转 Model;
2.main函数之前的优化
Main 函数之前是 iOS 系统的工作,所以这部分的优化往往更具有通用性。
减少自定义的动态库集成
精简原有的 Objective-C 类和代码
移除静态的初始化操作
使用更多的 Swift 代码