本次就针对不同方式的创建tableview而使用复用和取消复用做详细的讲解。
代码形式创建tableview
代码创建tableview且舍弃cell复用机制
自定义view
自定义tableviewcell
viewcontroller
思路解析:纯代码定义view, tableviewcell和viewcontroller。上面的实现舍弃了tableview的复用机制,cellForRowAtIndexPath:indexPath 保证了每次会根据indexpath来获取不同的cell。通过打印cell信息可以看到即便屏幕出现滚动,每次都依然会创建新的不同的cell,滚出屏幕的cell所占用的内存会被释放掉,这样的问题尤其在大数据的展示上会相对内存吃紧,不是很采纳。
代码创建tableview且使用复用机制
思路解析:纯代码定义view, tableviewcell和viewcontroller。 CodeReuseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; 使用了tableviewcell的复用机制,通过打印cell信息可以看到即便屏幕出现滚动,每次新出现的cell都会使用移出屏幕的cell的地址。
Xib形式创建tableview
registerxib并采用复用机制
思路解析:这里使用了新的复用机制写法,dequeueReusableCellWithIdentifier:forIndexPath 和 dequeueReusableCellWithIdentifier的主要区别在于系统会自动创建好cell如果取出来为空的话,不需要再自己做空cell的判断。但是使用这种新的方式前必须首先注册tableview对应的nib或者class形式的cell。现象和复用机制一样。通过打印cell信息可以看到即便屏幕出现滚动,每次新出现的cell都会使用移出屏幕的cell的地址。
registerclass并采用复用机制
思路解析:和上面的xib的注册方式很相似,唯一需要注意的地方是registerclass后,如果是纯代码写的cell,需要在cell文件中复写- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString*)reuseIdentifier
文章结尾附上github代码地址