美文网首页
iOS应用程序加载

iOS应用程序加载

作者: 叔简 | 来源:发表于2022-03-30 20:20 被阅读0次
  1. 在main()函数之前,在一般情况下,我们都会将main()函数作为程序入口,在main函数之前,程序所经历的事情


    image.png
  • 静态库:链接时会被完整的复制到可执行文件中,所以如果两个程序都用了某个静态库,那么每个二进制文件中,都会包含这个静态库文件
  • 动态库:链接时不复制,在程序启动后用动态加载,然后再决议符号,所以理论上动态库只用存在一份,好多个程序都可以链接到这个动态库上面,达到节省内存作用,还有另一个好处,由于动态库并不绑定到可执行程序上,所以我们想升级这个动态库就很容易

动态链接库

  • iOS中用到的所有系统framework
  • 加载OC runtime方法libobjc
  • 系统级别的libSystem,例如libdispatch(GCD)和libSystem_blocks(Block)
    这些放在内存中的共享库文件会在app启动后交给dyld动态链接器来进行链接管理,链接流程如下:


    image.png

main()函数之前

  • 首先加载load函数
  • 加载dyld,dyld_start来实现加载
  • main()函数:加载共享系统动态库,加载依赖的动态库,链接动态库,初始化主程序,返回主程序main()函数地址
  • 加载共享缓存
  • 生成ImageLoader对象
  • 加载所有插入的库loadInsertDylib
  • 链接主程序
  • 执行初始化方法initializeMainExecutable

dyld加载顺序

    1. __dyld_start(汇编)
    1. uintptr_t start()
    1. uintptr_t _main()
  • 3.1.配置上下文
  • 3.2.处理环境变量
  • 3.3.加载共享缓存
  • 3.4.将dyld加入UUID列表
  • 3.5.加载所有image
    3.5.1.为可执行文件实例化imageLoader
    3.5.2.为主可执行文件创建image
    3.5.3.加载任何插入动态库
    3.5.4.链接动态库
  • 3.6 初始化所有程序
    3.6.1.遍历初始化image
    3.6.2.通知image初始化完成
    3.6.3初始化libSystem
    3.6.4.初始化libdispatch
    3.6.5.初始化libobjc
  • 3.7进入主程序main函数

相关文章

  • 应用程序的加载分析

    应用程序的加载分析 作为一个开发者,对于iOS应用程序启动过程有很多疑问,本篇就应用程序是如何加载的,做相关分析 ...

  • iOS类的加载

    一,应用程序加载回顾 通过前面的学习我们对iOS应用程序的加载有了一个大致的认识, 1 系统调用exec() 会让...

  • iOS 应用程序加载

    1. 理论基础速成 1.1 静态库与动态库 库是已写好的、供使用的 可复用代码,每个程序都要依赖很多基础的底层库。...

  • iOS 应用程序加载

    编译过程 前段 预处理编译阶段:宏的替换,头文件的导入 编译阶段:进行词法、语法等的分析和检查,然后生成中间代码I...

  • iOS应用程序加载

    在main()函数之前,在一般情况下,我们都会将main()函数作为程序入口,在main函数之前,程序所经历的事情...

  • iOS底层之类的加载

    在iOS底层中,关于类的加载,在应用程序开始加载时,首先通过dyld链接到动态库objc,从objc中的init方...

  • iOS objc源码学习

    iOS应用程序的加载(一)[https://www.jianshu.com/p/0be286cc29d6]WWDC...

  • iOS应用程序的加载(二)

    前篇iOS应用程序的加载(一) [https://www.jianshu.com/p/0be286cc29d6] ...

  • iOS应用程序加载流程

    前言 我们都知道,每个项目都会有一个入口 main() 函数,是不是应用程序加载时第一个调用的就是 main 函数...

  • iOS 类的加载

    在 iOS 应用程序加载[https://www.jianshu.com/p/bffb5bdb4f13] 一篇,我...

网友评论

      本文标题:iOS应用程序加载

      本文链接:https://www.haomeiwen.com/subject/nnywjrtx.html