initialize、load和init执行顺序

int main(int argc, char * argv[]) {
     NSLog(@"%s:1",__func__);//第一个监测点
    
    @autoreleasepool {
         NSLog(@"%s:2",__func__);//第二个监测点
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}
#import "Person.h"

@implementation Person

+(void)load{
    NSLog(@"%s",__func__);
}

+(void)initialize{
    NSLog(@"%s",__func__);
}
-(instancetype )init{
    if (self = [super init]) {
       NSLog(@"%s",__func__); 
    }
    return self;
}

@end

执行代码

    Person *person1 = [[Person alloc] init];
    self.person1  = person1;
    Person *person2 = [[Person alloc] init];
    self.person2  = person2;

执行结果:
[1163:402998] +[Person load]
[1163:402998] main:1
[1163:402998] main:2
[1163:402998] +[Person initialize]
[1163:402998] -[Person init]
[1163:402998] -[Person init]

结果说明:

load方法 在程序启动前初始化执行一次,且只执行一次
initialize方法 在init前初始化执行一次,且只执行一次
init 为实例方法显而易见最后执行

你可能感兴趣的:(initialize、load和init执行顺序)