iOS基础 - 从点击应用图标说起

iOS从点击一个应用图标到程序主页面显示出来经历了哪些过程呢?

我们可以把启动过程分为main函数之前和main函数之后两个部分。

main函数之前

1.加载可执行文件

2.加载动态链接库加载器dyld

3.dyld递归加载dylibs

dyld加载过程

我们首先学习dyld加载过程,主要分5个部分。可以参考这里

image

1.Load dylibs

  • 解析所依赖的dylibs
  • 找到所需的mach-o文件
  • 打开和读取文件然后验证有效性
  • 注册代码签名
  • 每一个segment调用mmap()

2.Rebase

  • 对镜像调整指针。

3.Bind

  • 设置指针指向外部的镜像。

4.Objc

  • 大部分的初始化工作已经通过Rebase和Bind做完
  • 注册所有的Objc类
  • 将category插入到方法列表
  • 保证方法唯一

5.Initializers

  • 调用Objc和分类的+load方法
  • Dyld调用main()函数

main函数之后

main函数之后我们可以看下面这张图:


image
int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

1. main() 执行UIApplicationMain()

2. UIApplicationMain()创建UIApplication

3. UIApplicationMain()创建AppDelegate并复制

4. UIApplication创建并管理RunLoop

5. UIApplication调用application:didFinishLaunchingWithOptions:

6. application:didFinishLaunchingWithOptions:创建并显示Application Window

7. Application Window设置根控制器Root View Controller

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容