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

你可能感兴趣的:(iOS基础 - 从点击应用图标说起)