+load和+initialize

2021-04-14  本文已影响0人  MAXcrazs

+load和+initialize都是系统自行调用的,不需要手动调用。子类重写方法也不需要调用[super func];

+ load

代码1

1.png
@interface SimpleA : NSObject
@interface SimpleB : SimpleA
@interface SimpleC : SimpleA
  
SimpleB *o1 = [[SimpleB alloc] init];
SimpleC *o2 = [[SimpleC alloc] init];

结果

 A load
 0x1000087e8:C load
 0x100008838:B load
 A1 load
 B2 load
 B1 load
 A2 load
 main function
 Hello, World!

代码2

@interface SimpleA : NSObject
@interface SimpleB : SimpleA
@interface SimpleC : SimpleA
  
SimpleB *o1 = [[SimpleB alloc] init];
[SimpleB load];

结果

 A load
 0x100008808:C load
 0x100008858:B load
 A1 load
 B2 load
 B1 load
 A2 load
 main function
 Hello, World!
 B1 load

+ initialize

代码3

@implementation SimpleB (B1)
+ (void)initialize{
    NSLog(@"B1 initialize");
}
@end
@implementation SimpleC
@end
  
SimpleB *o1 = [[SimpleB alloc] init];
SimpleC *o2 = [[SimpleC alloc] init];

结果

 main function
 Hello, World!
 A2 initialize
 B1 initialize
 A2 initialize

代码4

@implementation SimpleB (B1)
+ (void)initialize{
    NSLog(@"B1 initialize");
}
@end
@implementation SimpleC
+ (void)initialize{
    NSLog(@"%p:C initialize", self);
}
@end
  
SimpleB *o1 = [[SimpleB alloc] init];
SimpleC *o2 = [[SimpleC alloc] init];

结果

 main function
 Hello, World!
 A2 initialize
 B1 initialize
 0x100008810:C initialize

手动调用

上一篇 下一篇

猜你喜欢

热点阅读