学做网站在哪里,搭建网站架构怎么做,网站设计深圳联系电话?,wordpress设置分类标题深入解析 iOS 应用启动过程#xff1a;main() 函数前的四大步骤 背景描述#xff1a;使用 Objective-C 开发的 iOS 或者 MacOS 应用 在开发 iOS 应用时#xff0c;我们通常会关注 main() 函数及其之后的执行逻辑#xff0c;但在 main() 函数之前#xff0c;系统已经为我们…深入解析 iOS 应用启动过程main() 函数前的四大步骤 背景描述使用 Objective-C 开发的 iOS 或者 MacOS 应用 在开发 iOS 应用时我们通常会关注 main() 函数及其之后的执行逻辑但在 main() 函数之前系统已经为我们完成了许多重要的初始化工作。这些工作确保了我们的应用能够顺利启动和运行。本文将详细解析在 main() 函数执行前iOS 系统所做的四大步骤。
步骤一加载可执行文件
当我们启动一个 iOS 应用时系统首先会加载应用的可执行文件。可执行文件是由多个目标文件.o 文件链接而成的。这一步骤确保应用的核心代码和数据已经加载到内存中准备好供后续使用。
步骤二加载动态链接库进行 Rebase 和 Bind
在加载可执行文件之后系统会加载应用依赖的所有动态链接库动态库或框架。这一步骤包括两个重要的操作
Rebase指针重定位调整动态库在内存中的基地址以确保所有内存引用都是正确的。Bind符号绑定解析和绑定所有符号函数和全局变量的地址以便在运行时可以正确调用这些符号。
通过这一步骤系统确保所有外部依赖都已正确加载并且符号地址已经绑定好为后续的代码执行做好准备。
步骤三Objective-C 运行时的初始处理
接下来Objective-C 运行时会进行一系列初始化处理包括
类的注册注册所有的 Objective-C 类使其在运行时可用。Category 注册注册所有的 Category确保它们的方法被正确添加到相应的类中。Selector 唯一性检查确保每个 Selector 在应用中是唯一的避免方法调用冲突。
这些初始化处理确保了 Objective-C 运行时环境的正确性和稳定性。
步骤四初始化工作
最后一步是各种初始化工作按照实际执行顺序如下所述 调用用 attribute((constructor)) 修饰的函数 这些函数会在加载动态链接库并进行基本内存布局之后首先被调用。这些函数用于执行早期的初始化操作。 执行类和 Category 的 load 方法 接下来Objective-C 运行时会执行所有类和 Category 的 load 方法。load 方法在类或 Category 被加载到运行时时调用用于执行类级别的初始化操作。需要注意的是load 方法的调用顺序是按照类和 Category 的加载顺序父类的 load 方法会先于子类的 load 方法执行。 初始化和创建全局变量 最后系统会初始化和创建全局变量。这包括全局 C 对象的构造函数调用和全局 Objective-C 对象的初始化。这些变量的初始化通常会在 load 方法之后进行因为全局变量的初始化可能依赖于类的加载和初始化。
通过上述四个步骤iOS 系统为我们的应用创建了一个稳定的运行环境使得应用可以顺利地从 main() 函数开始执行主逻辑。
总结 在 main() 函数执行之前iOS 系统进行了许多关键的初始化工作。这些工作包括加载可执行文件和动态链接库、进行 Objective-C 运行时的初始处理以及执行一系列初始化操作。这些步骤确保了应用在启动时拥有一个稳定和正确的运行环境。
理解这些初始化过程不仅有助于我们更好地理解 iOS 应用的启动机制还能帮助我们在开发过程中优化应用的启动性能。希望这篇文章能对你有所帮助让你对 iOS 应用的启动过程有更深入的了解。