loadView的生命周期
- (void)viewDidLoad {
[super viewDidLoad];
//在viewDidLoad方法中,不能使用superView,因为view的get方法还没有走完,肯定没有添加的其他视图上。
NSLog(@"%@",self.view.subviews);
//在init方法中不应该出现self。view,否则数据还没有加载,就直接调用viewDid了。
//请解释死循环
// self.view = nil;
// NSLog(@"%@",self.view);
//3.
}
/*
1.代码先运行get方法,先判断view是否存在,如果存在就直接return,如果不存在,就先调用loadView,再调用viewDidLoad。
2。在loadView中先判断是否存在xib文件,如果存在,就直接加载xib文件,如果不存在,就自己创建一个xib文件,并且初始化。
3.最后调用viewDidLoad
*/
- (UIView *)view{
//如果view存在。则返回
if ([self valueForKey:@"_view"]) {
return [self valueForKey:@"_view"];
}
//如果不存在,先调用loadView再调用viewDidLoad
[self loadView];
//2.
[self viewDidLoad];
return [self valueForKey:@"_view"];
}
- (void)loadView{
//判断xib是否存在
NSFileManager*manage =[NSFileManager defaultManager];
NSString *path =[[[NSBundle mainBundle]bundlePath]stringByAppendingFormat:@"/%@.nib",NSStringFromClass([self class])];
if ([manage fileExistsAtPath:path]) {
//通过加载xib文件加载视图
//1.
//loadView。。。可以返回一个含有xib文件中视图元素数组(view view1)
//owener 参数必须要写,如果不写,不会对声明了IBOutlet的变量赋值
[[NSBundle mainBundle]loadNibNamed:NSStringFromClass([self class]) owner:self options:nil];
return;
}
//如果不存在xib文件,则初始化一个白的视图
UIView *v = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
v.backgroundColor = [UIColor redColor];
[self setView:v];