标签:
关于 initWithNibName 和 loadNibNamed 的区别和联系。之所以要把这两者来一起讲,我觉的我也有点困惑,到底用那种?其实真正搞清楚了他们之间的差别,就不会这么迷惘了。因为这两个方法,根本就不是一路货色。
下面进入主题,谈区别:
ShowViewController * showMessage = [[ShowViewController alloc] initWithNibName:@"ShowViewController" bundle:nil]; self.showViewController = showMessage; [showMessage release];
NSArray * nib = [[NSBundle mainBundle] loadNibNamed:@"Save3ViewController" owner:self options:nil] ; self.showViewController = [nib lastObject];[nib objectAtIndex:0];
1、loadNibNamed方法:
-(NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options
参数:
name:nib文件的名称
owner:指定name参数所指代的nib文件的File‘s Owner
options:当nib文件开始时,需要的数据
返回值:返回符合对象的数组。
例子:初始化一个View
CustomCell *cell=(CustomCell *)[tableView dequeueReusableCellWithIdentifier:CustomCellTableIdentifier]; if (cell==nil) { NSArray *nib=[[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil]; cell=[nib objectAtIndex:0];// 因为返回的是数组 }
在这个时候生成后会让引用计数器变为1,但是需要注意得,owner:self ,在owner自己dealloc得时候,系统会自动帮你将你自定义view引用计数器-1得。
特别注意:
loadNibNamed:owner:options: 这个函数会返回一个nib的数组。不过,在iPhone2.1包括以后的版本,这个数组的第一个元素,即nib[0]表示的就是除了File‘s Owner 和 File Responder后的第一个东西。在iPhon2.1之前的版本,nib[0]是File‘s Owner,nib[1]才是除了File‘s Owner 和 File Responder后的第一个东西。
例子:
一个继承UIView的类
图1
图2
在objects一栏中设置LoadView.xib的class为要创建的类型( 这里是LoadView.h)
然后调用[[NSBundle mainBundle]loadNibNamed:@"LoadView" owner:self options:nil],这里的owner参数无所谓,随便设置,(猜测)因为我的xib文件中没有对File‘s Owner的Outlets进行关联。
使用数组对象接收:NSArray *nib=[[NSBundle mainBundle] loadNibNamed:@"LoadView" owner:self options:nil];
数组中的元素是图2中Objects一栏中的元素,注意,这里并没有包含LoadView中的节点元素,所以Objects个数是2,即nib数组的个数是2,且[nib objectAtIndex:0]即是图2中第一个Load View。
此时写loadView = [[nib objectAtIndex:0]; 把xib中Objects中的第一个对象赋给loadView。
关于 initWithNibName 和 loadNibNamed 的区别和联系
标签:
原文地址:http://www.cnblogs.com/tangaofeng/p/4874266.html