-
load方法的调用时机?
。在类或者分类开始加进去内存的时候就会调用,其中分类的方法并不会覆盖类中的方法,而且load方法只会程序运行的时候只会调用一次。
例子:
image.png
image.png
其中DGStudent继承DGPerson,DGPerson+test为person的分类
-
load方法的调用顺序?
。如果类的方法和分类的方法都有load方法,那么先调用类的方法,如果这个类本身有继承关系,那么先调用父类的方法,在调用子类的方法。
。分类的load方法调用顺序是按照编译进程序的顺序先后执行的,先编译进去的先调用,后编译进去的后调用,如图:
image.png
所以student比DGPerson+test先打印,但是不管怎样最先打印的都是person
initalize方法的什么时候调用“
。当这个类第一次开始接受到消息的时候就开始调用,比如 DGPerson *person = [DGPerson alloc] init]相当于 objc_megSend("person",@selector(@"alloc")),所以就是调用initalize 方法。-
initalize方法的调用顺序
。如果有继承的关系,先调用父类的initalize方法,然后在调用子类的initalize方法,如果有分类的initalize方法 先调用分类的initalize方法,分类的initalize的方法调用顺序是越参与编译的越后的越先调用,如:
image.png
一个类的initalize方法有可能调用两次,原因是这个类有子类,子类中有实现initalize方法,父类中也实现了initalize方法,那么调用子类的initalize方法 会实现父类的initalize方法和子类的initalize方法(前提是子类没有分类)。如果子类有分类那么实现子类的分类的initalize方法和父类的initalize方法.假如父类也有initalize方法那么调用子类会实现父类的initalize方法和子类的分类的initalize方法
initalize 和load方法的区别?
。initalize是通过消息发送机制开始调用的,而load是类、分类等等开始加进内存中就开始调用。
。load方法在程序运行期间只调用一次,而initalize是类开始收到消息的时候调用一次,因为存在继承的关系 可能会被调用多次。
。load方法的优先原则是先调用父类、而initalize是优先调用分类。
load和initialize方法区别底层原理
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
- iOS开发中总能看到+load和+initialize的身影,网上对于这两个方法有很多解释,官方也有说明,但有些细...
- iOS底层原理总结 - Category的本质 面试题 Category的实现原理,以及Category为什么只能...
- 一: 早起,最早5:47,平均6:19起床,已坚持打卡86天.这周早起时间有点晚,最近女儿晚上也睡得晚了,这周几晚...