-
这个方法会在第一次初始化这个类之前被调用,我们用它来初始化静态变量。
-
initialize
方法的调用时机,当向该类发送一个消息(一般是类消息首先调用,常见的是alloc
)的时候,先调用类中的,在调用类别中的(类别中如果有重写);如果该类只是引用,没有调用,则不会执行initialize
方法 -
该方法类似一个懒加载,如果没有使用这个类,那么系统默认不会去调用这个方法,且默认只加载一次
-
initialize
的调用在init
方法之前 -
load方法会在加载类的时候就被调用,也就是iOS应用启动的时候,就会加载所有的类,就会调用每个类的
+(void)load
方法 -
load方法的调用时机,
main
函数之前,先调用类中的,再调用类别中的(类别中如果有重写)
load
和initialize
方法都会在实例对象之前调用,以main
函数为分水岭,前者在main
函数之前调用,后者在之后调用。这两个方法会被自动调用,无需且不能手动调用。load
和initialize
方法都不用显示的调用父类的方法而是自动调用,即使子类没有initialize
方法也会调用父类的方法,而load
方法则不会调用父类load
方法通常用来进行Method Swizzle,initialize
方法一般用于初始化全局变量或静态变量load
和initialize
方法内部使用了锁,一次它们是线程安全的。实现时要尽可能保持简单,避免阻塞线程,不要再使用锁。
-
类方法可以调用类型方法
-
类方法不可以调用实例方法,但是类方法可以通过创建对象来访问实例方法
-
类方法不可以使用实例变量。类方法可以使用
self
,因为self
不是实例变量 -
类方法作为消息,可以被发送到类或者对象里面去(实际上,就是可以通过类或者对象调用类方法)
-
- 实例方法里面的
self
,是对象的首地址 - 类方法里面的
self
,是Class
- 实例方法里面的