码迷,mamicode.com
首页 > 其他好文 > 详细

Objective-C类方法 load 和 initialize

时间:2017-08-19 13:04:20      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:bsp   not   html   logs   相同   object   tps   nbsp   覆盖   

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

标签:bsp   not   html   logs   相同   object   tps   nbsp   覆盖   

原文地址:http://www.cnblogs.com/Rthena/p/7395960.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!