代码改变世界

UIController中view的记载流程

2015-08-26 15:31  薰衣草的陪伴  阅读(121)  评论(0编辑  收藏  举报

 

//初始化方法

- (id)init{

    

    if (self = [super init]) {

        NSLog(@"%@",self.view);

    }

    return self;

 }

 

//view的get方法

- (UIView *)view{

//如果View存在,就返回

    if ([self valueForKey:@"_view"]) {

        return [self valueForKey:@"_view"];

    }

    //如果不存在,先调用loadView 再调用ViewDidLoad

    [self loadView];

    [self viewDidLoad];

     return [self valueForKey:@"_view"];

 }

 

 - (void)loadView{

       //判断读取xib文件的路径是否存在

    NSFileManager *manager = [NSFileManager defaultManager];

      NSString *path = [[[NSBundle mainBundle]bundlePath]stringByAppendingFormat:@"/%@.nib",NSStringFromClass([self class])];

     if ([manager fileExistsAtPath:path]) {

        //通过xib文件加载视图

        //LoadNib....可以返回一个含有xib文件中的视图元素数组(View View1)

        //owner 参数必须要写,如果不写,不会对声明了IBOutle的变量赋值

        [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil];

        return;

    }

 

 //如果不存在xib文件,则初始化一个白得视图

    UIView *view = [[UIView alloc]initWithFrame:[UIScreen mainScreen].bounds];

    view.backgroundColor = [UIColor redColor];

    //给self.view赋值

    [self setView:view];

  }

 

- (void)viewDidLoad{

 [super viewDidLoad];

     //在viewDidLoad方法中,不能使用superView,因为view的get方法还没有做完,肯定没有添加到其他视图

     NSLog(@"%@",self.view.subviews);

     //在init方法中不能出现

    NSLog(@"%@",self.title);

    

     //请解释死循环

//    self.view = nil;

//    NSLog(@"%@",self.view);

 

 

}