和 是 Objective-C Runtime 中两个非常特殊的类方法,它们都用于类的初始化,但在调用时机、调用方式、继承规则以及分类(Category)处理上有显著的区别。 以下是详细的对比分析: 核心区别总结表 | 特性 | +load | +initialize | | :--- | :--- | :--- | | 调用时机 | 被添加到 Runtime 时(App 启动,main 函数之前) | 类接收到第一条消息前(懒加载) | | 调用方式 | Runtime 直接获取函数指针调用 | 消息发送机制 | | 父类与子类 | 父类先调,子类后调。若子类未实现,不会调用父类的 load | 父类先调,子类后调。若子类未实现,会再次调用父类的 initialize | | 分类 (Category) | 主类先调,分类后调。所有分类的 load 都会被执行 | 分类会覆盖主类的 initialize(只执行一个) | | 执行次数 | 仅一次 | 理论上一次,但若子类未实现,父类代码可能运行多次 | | 使用场景 | Method Swizzling (方法交换) | 初始...