探秘Runtime
该文章属于<简书 — 刘小壮>原创,转载请注明: <简书 — 刘小壮> https://www.jianshu.com/p/4fb2d7014e9e 程序加载过程 在iOS程序中会用到很多系统的动态库,这些动态库都是动态加载的。所有iOS程序共用一套系统动态库,在程序开始运行时才会开始链接动态库。 除了在项目设置里显式出现的动态库外,还会有一些隐式存在的动态库。例如 objc 和 Runtime 所属的 libobjc.dyld 和 libSystem.dyld ,在 libSystem 中包含常用的 libdispatch(GCD) 、 libsystem_c (C语言基础库)、 libsystem_blocks(Block) 等。 使用动态库的优点: 防止重复。iOS系统中所有 App 公用一套系统动态库,防止重复的内存占用。 减少包体积。因为系统动态库被内置到iOS系统中,所以打包时不需要把这部分代码打进去,可以减小包体积。 动态性。因为系统动态库是动态加载的,所以可以在更新系统后,将动态库换成新的动态库。 加载过程 在应用程序启动后,由 dyld(the dynamic link editor) 进行程序的初始化操作。大概流程就像下面列出的步骤,其中第3、4、5步会执行多次,在 ImageLoader 加载新的 image 进内存后就会执行一次。 在引用程序启动后,由