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的底层原理