最近找工作中被问到这个问题,整个人就闷了,这是什么鬼……
- 根据这篇博文整理下笔记[细说OC中的load和initialize方法(http://www.jianshu.com/p/d25f691f0b07)
- load
- load 方法在这个文件被程序装载的时候调用。
- 每调用load方法就会先调用它的父类load方法
如果没有调用该load方法,则不会调用父类的load方法
- load方法总是在mian函数之前调用
除了Method Swizzle ,别的逻辑都不应该放到load方法中
- initialize
第一次给某个类发送消息的时候会被调用(同时会调用父类的initialize方法),并且只会调用一次
- 总结
- load和initialize方法都会在实例化对象之前调用,以main函数为分水岭,前者在main函数之前调用,后者在之后调用。这两个方法会被自动调用,不能手动调用它们。
- load和initialize方法都不用显示的调用父类的方法而是自动调用,即使子类没有initialize方法也会调用父类的方法,而load方法则不会调用父类。
- load方法通常用来进行Method Swizzle,initialize方法一般用于初始化全局变量或静态变量。
- load和initialize方法内部使用了锁,因此它们是线程安全的。实现时要尽可能保持简单,避免阻塞线程,不要再使用锁。