1.main函数之前系统做了那些事?
dyld(动态链接器)
-> 读取镜像文件,递归查找动态库
->ImageLoader将其加载到内存中
->rebase/bind修复镜像中的资源指针,来指向正确的地址
->dyld通知runtime
->map_image去解析和处理该镜像资源(注册Objc类,处理Category等)
->调用load_image,遍历调用类的load方法,调用C++的构造函数属性函数,创建非基本类型的C++静态全局变量等
- 我们可以通过在 Xcode 中 Edit scheme -> Run -> Auguments 将环境变量
DYLD_PRINT_STATISTICS 设为 1,在控制台看到main()函数之前的启动时间。 - 分解优化⽬标 分步达到优化⽬的
1). 耗时操作异步处理
2). 如果启动流程依赖⽹络请求回来才能继续,那么需要考虑⽹络极差情况下的启
动速度
3). 如果APP有loading⼴告⻚并且对分辨率的要求较⾼,请尝试做缓存吧
4). 主⻚⾯Controller中的viewDidLoad和viewWillAppear⽅法中尽量少做事情
5). 排查清理项⽬中未使⽤到的类库以及Framework
6). 删减合并⼀些OC类,删减没有⽤到或者可以不⽤的静态变量、⽅法等
7). 轻量化+load⽅法中的内容,可延迟到+initialize中
网友评论