Objective-C类方法 load 和 initialize

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Objective-C类方法 load 和 initialize相关的知识,希望对你有一定的参考价值。

1、区别:+load 是只要类所在文件被引用就会被调用而 +initialize 是在类或者其子类的第一个方法被调用前调用。所以如果类没有被引用进项目,就不会有 +load 调用;但即使类文件被引用进来,如果没有使用,那么 +initialize 也不会被调用。

 

2、相同点:方法只会被调用一次。

 

3、+load 方法探讨

技术分享

技术分享

技术分享

结论 :+load 的执行顺序是先父类 再到子类,后 category,而 category 的 +load 执行顺序是根据编译顺序决定的。

 

4、+initialize 方法探讨

   ①. 类和 category 都实现 +initialize 方法,这时候只会执行最后编译的 category 中的 +initialize 方法

技术分享

技术分享

 

②. 分类 和 子类都实现 +initialize 方法 (屏蔽category的 +initialize ),会优先调用父类方法,跟编译先后顺序无关

技术分享

技术分享

 

总结:1、当 类 和 category 都实现 +initialize 方法,category 的 +initialize 方法 和覆盖 类的 +initialize方法。

         2、只要类中的 A 方法被调用 在此之前 会先调用 父类 +initialize,再调用子类 +initialize,最后调用这个 A 方法。

 

note:这只是初步探讨,以后有什么发现会继续添加。

 

参考:https://tech.meituan.com/DiveIntoCategory.html

 

以上是关于Objective-C类方法 load 和 initialize的主要内容,如果未能解决你的问题,请参考以下文章

iOS之深入解析类方法+load与+initialize的底层原理

iOS-方法之+ initialize 与 +load(转载)

在 Objective-C 中的类属性上使用单词“set”

ios开发之 NSObject详解

Objective-C 类方法:点语法和​​“类属性”

Swift中使用 +load 和 +initialize