NSObject类有两个初始化方法:
1、+(void)load
必定会调用此方法,而且仅调用一次。
当包含类或分类的程序库载入系统时,在iOS平台下,肯定会在此执行。如果分类和其所属的类都定义了load方法,则先调用类里的,再调用分类里的。
在load方法中使用其他类是不安全的。
如果某个类本身没实现load方法,那么不管其各级超类是否实现此方法,系统都不会调用。
load方法务必实现得精简一些,因为整个应用程序在执行load方法时都会阻塞。
其真正用途仅在于调试程序。
2、+(void)initialize
会在程序首次用该类之前调用,且只调用一次。
绝不应该通过代码直接调用。
load是没调用类之前就要调用,此方法是只有调用了类才会被调用。
此方法被调用的时候,可以安全的使用并调用任意类中的任意方法,并且是线程安全的。
遵循通常的继承规则。
通常这样实现此方法:
+(void)initialize
{
if (self == [EOCClass class])
{
NSLog(@" initialize ", self);
}
}
也需要实现得精简一些。
若某个全局状态无法在编译期初始化,则可放在initialize里来做。
#import "EOCClass.h"
static const int kInterval = 10;
static NSMutableArray *kSomeObjects;
@implementation EOCClass
+(void)initialize
{
if (self == [EOCClass class])
{
kSomeObjects = [NSMutableArray new];
}
}
@end