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

// 以后自定义控制器建议写这个方法,让控制器一创建出来就拥有某些属性

// 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. sub:
  14. self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  15. if (self) {
  16. set   param=@“sub-B”
  17. NSLog(@“B-initNIb”);
  18. }
  19. viewDIdLoad
  20. {
  21. [super viewDidiLoad];
  22. NSLog(@“B-View”);
  23. NSLog(param);

执行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已经执行过了。

时间: 2025-01-08 07:10:27

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

关于 initWithNibName 和 loadNibNamed 的区别和联系

关于 initWithNibName 和 loadNibNamed 的区别和联系.之所以要把这两者来一起讲,我觉的我也有点困惑,到底用那种?其实真正搞清楚了他们之间的差别,就不会这么迷惘了.因为这两个方法,根本就不是一路货色. 既然,是要说明这2个方法,那就着重将区别吧. 但是第一步,还是要罗嗦一下,他们的联系:可以使用此方法加载用户界面(xib文件)到我们的代码中,这样,可以通过操作这个加载进来的(xib)对象,来操作xib文件内容. 下面进入主题,谈区别: 1. ShowViewContro

IOS中Retain和Copy的区别

IOS中Retain和Copy的区别 1 ,可读性: readonly  . readwrite@property(readwrite,....) valueType value;这个属性是变量的默认属性,就是如果你 (readwrite and readonly 都没有使用,那么你的变量就是 readwrite 属性 ) ,通过加入 readwrite 属性你的变量就会有 get 方法,和 set 方法.property(readonly,...) valueType value;这个属性变量

一张图让你明白IOS中bounds和frame的区别

很多人在学习的就搞混了bounds和frame的区别,大家可以看看这张图就会明白它俩的区别: frame: 该view在父view坐标系统中的位置和大小.(参照点是,父亲的坐标系统) bounds:该view在本地坐标系统中的位置和大小.(参照点是,本地坐标系统,就相当于ViewB自己的坐标系统,以0,0点为起点) center:该view的中心点在父view坐标系统中的位置和大小.(参照点是,父亲的坐标系统) 看上图中,如果将ViewA的bounds设置为(-200,-100,550,400)

iOS中堆和栈的区别

堆和栈的区别主要有以下五点: 1.管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制:对于堆来讲,释放工作由程序员控制,容易产生memory leak(内存泄露). 2.申请大小: 栈是向低地址扩展的数据结构,是一块连续的内存区域.这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,是一个编译时就确定的常数,如果申请空间超过栈的剩余空间时,将提示overflow(溢出).因此,能从栈获得的空间较小. 堆是向高地址扩展的数据结构,是不连续的内存区域.这是由于系统是由链表来存储的空闲内

ios 中tableview和scrollView的区别

scrollView: 1. 介绍scrollView一些属性     1>.要想使用scrollView必须做两件事 1).设置scrollView内容 2).设置contentSize (滚动范围) 2>.其他属性         1). contentOffset(滚动位置)         2). contentInset(额外增加的滚动区域)         3). bounces (设置UIScrollView是否需要弹簧效果) 4). crollEnabled (设置UIScro

initWithNibName 和 loadNibNamed 的区别

原文地址:http://blog.csdn.net/dizzthxl/article/details/9031255 UIViewController initWithNibName 这时候是延迟加载 主要代码如下: ShowViewController * showMessage = [[ShowViewController alloc] initWithNibName:@"ShowViewController" bundle:nil]; self.showViewControlle

【原】iOS中KVC和KVO的区别

在iOS开发中经常会看到KVC和KVO这两个概念,比较可能混淆,特地区分一下 KVC(Key Value Coding) 1> 概述 KVC:Key Value Coding,键值编码,是一种间接访问实例变量的方法. KVC 提供了一个使用字符串(Key)而不是访问器方法,去访问一个对象实例变量的机制. 2> KVC部分源码(头文件) 1 // NSKeyValueCoding.h 2 @interface NSObject(NSKeyValueCoding) 3 4 + (BOOL)acce

iOS中sqlite和coreData的区别

sqlite和coreData的区别: 1.sqlite数据库的操作流程: 创建数据库,再通过定义一些字段来定义表格结构,可以利用sql语句向表格中插入记录,删除记录,修改记录,表格之间也可以建联系. sqlite和coreData的类做个对应: 表结构--------NSEntityDescription(菜单详情) 数据库中所有的表格和他们的联系--------NSmanagedObjectModel(菜谱) 数据库存放方式---------NSPersistentStoreCoordina

iOS中ASI和AFN的区别

一.底层实现 1> AFN的底层基于OC的NSURLConnection和NSURLSession 2> ASI的底层基于纯C语言的CFNetwork框架 3> ASI的运行性能 高于 AFN 二.对服务器返回的数据处理 1> ASI没有直接提供对服务器数据处理的方式,直接返回data\string 2> AFN提供了多种对服务器数据处理的方式 * JSON处理 * XML处理 * 其他处理 三.监听请求的过程 1> AFN提供了success和failure两个blo