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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- oc绝大多数类都继承自根类NSObject该类有两个初始化方法,一个是initialize另一个则是load + ...
- 共同点: 在不考虑开发者主动使用的情况下,系统最多会调用一次如果父类和子类都被调用,父类的调用一定在子类之前都是为...
- 重点: Objective-C 有两个神奇的方法:+load 和 +initialize,这两个方法在类被使用时会...
- + load方法 在程序启动时,会加载所有的类和分类,并调用所有类和分类的 + load方法 先加载父类,再加载子...