ios load 与 intalized

2017-07-24  本文已影响0人  俊俊吖

一.load 的调用

load 方法会在加载类的时候就被调用,也就是 ios 应用启动的时候,就会加载所有的类,就会调用每个类的 + load 方法。
2.load 方法的调用顺序 父母优先于子类 子类优先于分类
举个例子:首先创建两个类 其中一个继承与另一个

import "Person.h"

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

//在创建一个类继承与Person

import "Girl.h"

@implementation Girl
+(void)load{
NSLog(@"%s",func);
}
+(void)initialize{
[super initialize];
NSLog(@"%s %@",func,[self class]);
}
-(instancetype)init{
if (self = [super init]) {
NSLog(@"%s",func);
}
return self;
}
@end

再创建一个Person的分类

import "Person+Run.h"

@implementation Person (Run)
+(void)load{
NSLog(@"%s",func);
}
@end

int main(int argc, char * argv[]) {
NSLog(@"%s",func);
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
运行一下结果如下
2017-07-24 10:53:37.746 RunTime[1294:36243] +[Person load]
2017-07-24 10:53:37.748 RunTime[1294:36243] +[Girl load]
2017-07-24 10:53:37.749 RunTime[1294:36243] +[Person(Run) load]
2017-07-24 10:53:37.749 RunTime[1294:36243] main

//load 方法一定是在main之前调用的

二.initalized(不需要初始化也调用)
相当于一个懒加载的方式,在init之前调用 而且之后调用一次,如果子类有initalized方法,先调用父类的initalzied 在调用子类的 调用完之后才会调用init的方法,init的方法也是先调用父类的,再调用子类的。

举个例子:
我在添加一个继承与Person的类Son里面不写任何方法

import "Son.h"

@implementation Son

@end
在ViewController里面调用才会启动 initalzied 和 init方法

@interface ViewController ()

@end

@implementation ViewController

上一篇下一篇

猜你喜欢

热点阅读