iOS +initialize和+load
作者:
不離 | 来源:发表于
2018-03-16 09:19 被阅读30次 NSObject类有两种初始化方式load和initialize
load
+ (void)load;
1. 对于加入运行期系统的类及分类,必定会调用此方法,且仅调用一次。
2. iOS会在应用程序启动的时候调用load方法,在main函数之前调用。
3. 执行子类的load方法前,会先执行所有超类的load方法,顺序为父类-子类-分类
4. 在load方法中使用其他类是不安全的,因为会调用其他类的load方法,而如果方法复杂的话,就无法判断出各个类的载入情况,类只有初始化完成后,类实例才能进行正常使用。
5. load 方法不遵循继承规则,如果类本身没有实现load方法,那么系统就不会调用,不管父类又没有实现(跟 initialize)
6. 尽可能的的精简load方法,因为整个应用程序在执行load方法时会阻塞,即,程序会阻塞直到所有的load方法执行完毕,才会继续
7. load方法中最常用的就是方法交换method swizzling
initialize
+ (void)initialize;
1. 在首次使用该类之前由运行期系统(非人为的)调用,且仅调用一次
2. 惰性调用,只有当程序使用相关类时,才会调用
3.运行期系统会确保initialize方法是在线程安全的环境中执行,即,只有执行initialize的那个线程可以操作类或者类实例。其他线程都要先阻塞,等待initialize执行完。
4.如果类未实现initialize方法,而其超类实现了,那么就会运行超类的实现代码,且会运行两次
4.1 initialize遵循继承规则
4.2 初始化子类的时候会先初始化父类,然后会调用父类的initialize方法,而子类没有覆写initialize方法,因此,会再次调用
本文标题:iOS +initialize和+load
本文链接:https://www.haomeiwen.com/subject/yhklqftx.html
网友评论