iOS App的启动过程

1.iOS系统首先会加载解析该app的info.plist文件,因为info.plist中包含了支持app加载进行所需要的众多key value配置信息。比如app的运行条件(required device capabilities),是否全屏,app启动图信息等。
2.创建沙盒-iOS8以后,每次启动app都会创建新的沙盒路径,所以我们存储文件时要用相对路径,否则重新启动app后沙盒路径发生变化,会读取不到数据。
3.根据info.plist的配置检查相应权限状态
4.加载MachO文件读取dyld路径,并运行dyld动态连接器(内核加载了主程序,dyld只会负责动态库的加载)

  • 首先dyld会寻找合适的cpu运行环境
  • 然后加载程序运行所需的依赖库和我们自己写的.h .m文件编译成的.O可执行文件,并对这些库进行链接
  • 加载所有方法(runtime就是在这个时候被初始化并完成OC的内存布局)
  • 加载C函数
  • 加载category的扩展(此时runtime会对所有类结构进行初始化)
  • 加载C++静态函数,加载OC的+load方法
  • 最后dyld返回main函数地址,main函数被调用

由此可延伸出另外两个问题,可以参看我的其他文章:
MachO文件的结构:MachO文件的结构
启动优化可以怎么做:iOS App启动优化

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容