load是只要类所在文件被引用就会被调用,而initialize是在类或者其子类的第一个方法被调用前调用。所以如果类没有被引用进项目,就不会有load调用;但即使类文件被引用进来,但是没有使用,那么initialize也不会被调用
我自己创建了两个类,一个是father类,一个是child类,child类继承于father类。
现在我只要引用了father类#import "Father.h"
两个类里面的initialize和load都会被执行。这是不是跟上面的描述“即使类文件被引用进来,但是没有使用,那么initialize也不会被调用”有矛盾?
这是father.m
#import "Father.h"
@implementation Father
+ (void)load
{
NSLog(@"%@ %s", [self class], __FUNCTION__);
}
+ (void)initialize
{
NSLog(@"%@ %s", [self class], __FUNCTION__);
}
- (void)test
{
}
@end
这是child.m
`#import "Child.h"
@implementation Child
+ (void)load
{
NSLog(@"%@ %s", [self class], __FUNCTION__);
}
+ (void)initialize
{
NSLog(@"%@ %s", [self class], __FUNCTION__);
}
- (void)test
{
}
@end
可以把
NSLog(@"%@ %s", [self class], __FUNCTION__);
去掉试试。你调用了
[self class]
方法,所以运行时会去调用initialize
方法。