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
应该只会调用两个类的load方法,检查下是不是哪边实例化了,或者把代码贴出来看看。
外部调用,不可能是[self class]问题。如果是的话,就会导致死循环吧
可以把NSLog(@"%@ %s", [self class], __FUNCTION__);
去掉试试。
你调用了 [self class]
方法,所以运行时会去调用initialize
方法。