记得是在iOS6之前,是没有用注册的,现在用注册方法,貌似让我们省去了许多麻烦
以前的时候,是用的:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"重用标识符"];
if (cell == nil){
cell = [[UITableViewCell alloc]initWithStyle:(UITableViewCellStyleValue2) reuseIdentifier:@"标识符"];
}
那么,它和现在的register有什么区别呢?
区别在于,以前的写法取出重用的cell可能是空的,需要我们去手动判断操作,而后来的写法,如果取出的重用cell为空的话,register会告诉它去创建一个什么样的cell ! 在某些情况下,如果使用了自定义的cell 没有去给它注册的话,它会崩溃!所以说,register一般情况是真对的自定义的cell而言的!
而register有两种情况,一个是nib注册的,一个是Class注册的情况.
在Xib或者storyboard(特殊情况除外)中,会指定cell的Class为自定义的类型,然后在控制器(controller)中,调用tabView的registerNib:forCellReuseIdentifier: 方法,向数据源注册cell
然后在 cellForRowIndexPath 的方法中,用 dequeueReusableCellWithIdentifier:forIndexPath: 来获取重用的cell, 如果没有重用的cell,它就会自动使用所提供的Nib文件创建cell,并返回. 而且在创建新的cell的同时,会调用 -(void)awakeFromNib方法,我们就可以通过重写这个方法来添加更多页面内容了
如果使用的是 registerClass,在cell没有可以重用的cell的事后将会调用cell中的 initWithStyle:withReusableCellIdentifier: 方法 创建新的 cell
所以,在使用dequeueReusableCellWithIdentifier: 的时候,必须手动的去判断是否cell为空,若为空就创建新的cell;
而在使用
dequeueReusableCellWithIdentifier: forIndexPath: 的时候,就必须要去注册,如果不注册,则会崩溃!但返回的cell可省略空值判断的步骤!
### 在注册中cell的方法中,UINib 为做可视图的, 而Class 是做代码的,所以,如果你的自定义cell是用代码敲出来的, 就用Class , 如果是控件拖出来的,就用UINib吧!