首页 > initialize和load的区别

initialize和load的区别

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方法。

【热门文章】
【热门文章】