码迷,mamicode.com
首页 > 移动开发 > 详细

iOS中initWithNibName 和 loadNibNamed 的区别和联系(参考孤独的豆沙包)

时间:2015-12-02 12:32:50      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:

   

// 以后自定义控制器建议写这个方法,让控制器一创建出来就拥有某些属性
// init方法内部默认会调用initWithNibName方法

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {

        self.hidesBottomBarWhenPushed=YES; //当push到下一个页面时隐藏底部导航条

    }

    return self;

}

1. ShowViewController的initWithNibName方法

ShowViewController* showMessage = [[ShowViewController alloc]

  initWithNibName:@"ShowViewController" bundle:nil];

  self.showViewController = showMessage;

2.VideoCellController的loadNibNamed方法

NSArray * nib = [[[NSBundle mainBundle]loadNibNamed:@"Save3ViewController" 

                              owner:self options:nil] lastObject];

 

1.他们的联系:可以使用此方法加载用户界面(xib文件)到我们的代码中,这样,可以通过操作这个加载进来的(xib)对象,来操作xib文件内容。

2.区别:

(1).initWithNibName要加载的xib的类为我们定义的视图控制器类 

  loadNibNamed要加载的xib的类为NSOjbect。

(2).加载方式不同

 initWithNibName方法:是延迟加载,这个View上的控件是 nil 的,只有到 需要显示时,才会不是 nil

loadNibNamed方法:即时加载,用该方法加载的xib对象中的各个元素都已经存在。

3.initWithNibName:nibNameOrNil得执行顺序:

  1. supper :  
  2. self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  
  3. if (self) {  
  4. set   param=@“supper-A”  
  5. NSLog(@“A-initNIb”);  
  6. }  
  7. viewDIdLoad  
  8. {  
  9. [super viewDidiLoad];  
  10. NSLog(@“A-view”);  
  11. NSLog(param);  
  12. }  
  13.   
  14. sub:  
  15. self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  
  16. if (self) {  
  17. set   param=@“sub-B”  
  18. NSLog(@“B-initNIb”);  
  19. }  
  20. viewDIdLoad  
  21. {  
  22. [super viewDidiLoad];  
  23. NSLog(@“B-View”);  
  24. NSLog(param);  
  25. }  

执行sub时输出顺序:

A-initNIb   

A-view

supper-A

B-View

supper-A

B-initNIb

sub-initWithNibName: 里调用supper的initWithNibName:

superclass的initWithNibName方法结束,表示nib文件已加载,则调用sub的 viewDidLoad方法。于是应调用[subclass viewDidLoad]方法。

subclass的viewDidLoad方法又调用了supclass的viewDidLoad方法。

最后才是initWithNibName方法剩余的代码

结论,你在sub里面设置的param=sub-B,并没有起作用输出,因为,在设置之前,sub的view已经执行过了。

 

iOS中initWithNibName 和 loadNibNamed 的区别和联系(参考孤独的豆沙包)

标签:

原文地址:http://www.cnblogs.com/lv14/p/5012451.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!