在IOS开发中,就像Application有生命周期回调方法一样,在Objective-C的类被加载和初始化的时候,也可以收到方法回调,可以在适当的情况下做一些定制处理。而这正是本篇文章所要介绍的load和initialize方法可以帮我们做到的。
load和initialize的共同特点
load和initialize有很多共同特点,下面简单列一下:
- 在不考虑开发者主动使用的情况下系统最多会调用一次
- 如果父类和子类都被调用,父类的调用一定在子类之前
- 都是为了应用运行提前创建合适的运行环境
- 在使用时都不要过重地依赖于这两个方法,除非真正必要
+load方法
- 调用时机比较早,运行环境有不确定因素。具体说来,通常都是App启动前进行调用,当load调用的时候,并不能保证所有类都加载完成且可用,必要时还要自己负责做auto release处理.
- 对于一个类,如果没有实现load方法就不会调用,不会考虑对NSObject的继承.
- 父类的load方法会优先于子类调用,类别的load方法一般最后调用不会直接触发initialize的调用。
通俗的讲就是: 在程序启动之前会调用所有的类的(手动实现的)+load方法(没有实现就不调用咯),按(父类->子类->类别)的顺序调用.
+initialize方法
- initialize的自然调用是在第一次主动使用当前类的时候 (第一次 alloc 时)
- 在initialize方法收到调用时,运行环境基本健全。
- initialize的运行过程中是能保证线程安全的。
- 和load不同,即使子类不实现initialize方法,会把父类的实现继承过来调用一遍。注意的是在此之前,父类的方法