首先就是需要了解关于app启动的时候都干了什么事情,包括我们点击build按钮都干了什么:
当我们点击了 build 之后,做了什么事情呢?
预处理(Pre-process):把宏替换,删除注释,展开头文件,产生 .i 文件。
编译(Compliling):把之前的 .i 文件转换成汇编语言,产生 .s文件。
汇编(Asembly):把汇编语言文件转换为机器码文件,产生 .o 文件。
链接(Link):对.o文件中的对于其他的库的引用的地方进行引用,生成最后的可执行文件(同时也包括多个 .o 文件进行 link)。
其实通常对我们来说的话就是分为编译阶段和执行阶段;在我们app代码里面进行区分就是以main()函数为间隔区分这两个阶段,main()函数执行之前做的事情就是我们所要进行优化的地方了,即pre-main:在这段时间里系统会进行加载动态库、注册 Objc 类等系统操作。
在我们要优化之前首先我们要看一下,我们具体看一下启动时间到底是多少(系统方法):Edit scheme -> Run -> Auguments 将环境变量 DYLD_PRINT_STATISTICS 设为 1)然后运行,控制台就会打印我们的premain所用的时间。