三种情况,四种方法:

情况一:加载xib中描述的cell

情况二:加载纯代码自定义的cell

情况三:加载storyBoard中的tableView内的cell

针对于情况一:

// 导入自定义cell的.h文件,在viewDidLoad方法中注册xib中描述的cell,因为只需要注册一次,所以选择在viewDidLoad方法中注册
#import "WSUserCell.h" - (void)viewDidLoad { [self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([WSUserCell class]) bundle:nil] forCellReuseIdentifier:WSUserCellId]; }

针对于情况二:

// 方法一:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *ID = @"carID";
UITableViewCell *carCell = [tableView dequeueReusableCellWithIdentifier:ID];
if (carCell == nil) {
carCell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
} WSCarGroups *carGroup = self.arrayModel[indexPath.section];
WSCars *car = carGroup.cars[indexPath.row]; carCell.textLabel.text = car.carName;
carCell.imageView.image = [UIImage imageNamed:car.carIcon]; return carCell;
}
// 方法二:

- (void)viewDidLoad {
// 注册
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *ID = @"carID";
UITableViewCell *carCell = [tableView dequeueReusableCellWithIdentifier:ID];
// 因为已经注册过这个cell类,所以就不用写这句代码
// if (carCell == nil) {
// carCell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
// } WSCarGroups *carGroup = self.arrayModel[indexPath.section];
WSCars *car = carGroup.cars[indexPath.row]; carCell.textLabel.text = car.carName;
carCell.imageView.image = [UIImage imageNamed:car.carIcon];
return carCell;
}

针对于情况三:

即不需要注册,也不需要在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath中判断cell是否为空,系统会自动加载storyBoard中指定reuseIdentifier的cell

- (void)viewDidLoad {
[super viewDidLoad]; self.tableView.rowHeight = ;
// 千万不要注册,因为注册的优先级大于storyBoard,一旦注册就不会加载storyBoard中的cell
// [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"tg"];
} - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row % == ) {
static NSString *ID = @"tg";
XMGTgCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; cell.tg = self.tgs[indexPath.row]; return cell;
} else {
return [tableView dequeueReusableCellWithIdentifier:@"test"];
}
}

如下图,为storyBoard中给cell绑定的reuseIdentifier:

UITableView的cell重用优化的更多相关文章

  1. iOS - UITableView中Cell重用机制导致Cell内容出错的解决办法

    "UITableView" iOS开发中重量级的控件之一;在日常开发中我们大多数会选择自定Cell来满足自己开发中的需求, 但是有些时候Cell也是可以不自定义的(比如某一个简单的 ...

  2. 解决UITableView中Cell重用机制导致内容出错的方法总结

    UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的 UITableViewCell,可以让UITableViewCell响应一些点 ...

  3. ios UITableView中Cell重用机制导致内容重复解决方法

    UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的 UITableViewCell,可以让UITableViewCell响应一些点 ...

  4. iOS开发之UITableView及cell重用

    1.UITanleview有的两种风格 一种是Plain,一种是Grouped,可以从这里设置风格: 他们样式分别如下: Plain: Grouped: 2.tableView展示数据的过程: (1) ...

  5. iOS解决UITableView中Cell重用带来的问题

    tableView的常规配置,当超出一屏的cell就会标上可重用的标识出列到可重用缓存池中,后面再根据可重用标识来到的可重的cell就会和前面显示同样内容. - (UITableViewCell *) ...

  6. UITableView中的cell的优化

    1.cell的重用 所谓的cell的重用就是,视图加载的时候只会创建当前视图中的cell,或者比当前视图多一点的cell, 当视图滚动的时候,滚出屏幕的cell会放进缓存中,滚进屏幕的cell会根据I ...

  7. UI:UITableView 编辑、cell重用机制

    tableView编辑.tableView移动.UITableViewController tableView的编辑:cell的添加.删除. 使⽤场景: 删除⼀个下载好的视频,删除联系⼈: 插⼊⼀条新 ...

  8. 使用Autolayout实现UITableView的Cell动态布局和高度动态改变

    本文翻译自:stackoverflow 有人在stackoverflow上问了一个问题: 1 如何在UITableViewCell中使用Autolayout来实现Cell的内容和子视图自动计算行高,并 ...

  9. 解决Cell重用内容混乱的几种简单方法,有些方法会增加内存

    重用实现分析 查看UITableView头文件,会找到NSMutableArray*  visiableCells,和NSMutableDictnery* reusableTableCells两个结构 ...

随机推荐

  1. BZOJ 2705: [SDOI2012]Longge的问题

    2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 2554  Solved: 1566[Submit][ ...

  2. 资料,来自HTML5前端开发学习⑤群

    resource HTML5+CSS3视频教程:http://pan.baidu.com/s/1hsyOjze 密码:c3uw JavaScript视频教程:链接:http://pan.baidu.c ...

  3. XAMPP中proftpd的简明配置方法

    XAMPP中proftpd的简明配置方法   用LAMPP的安装方法可以开一个默认的nobody用户,用lampp security就可以初始设置相应的默认用户密码.如果要有多用户,又怎样管理.目录怎 ...

  4. java集合比较

    几种集合的比较Hashset,hashmap无序的treeset,hashset有序的 linkedhashset 有序的,和插入数序一样的

  5. noi题库(noi.openjudge.cn) 1.8编程基础之多维数组T21——T25

    T21 二维数组右上左下遍历 描述 给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按从左上到右下的对角线顺序遍历整个数组. 输入 输入的第一行上有两个整数,依次为 ...

  6. 2015-2016-2 《Java程序设计》教学进程

    2015-2016-2 <Java程序设计>教学进程 目录 考核方式 寒假准备 教学进程 第00周学习任务和要求 第01周学习任务和要求 第02周学习任务和要求 第03周学习任务和要求 第 ...

  7. centos6-honeyd安装&配置

    安装 需要装 libpcap libevent libdnet 等(!) 有些用的yum,有些下载的安装包手动安装 (wget tar configure make install 非常linux) ...

  8. SpringMVC源码分析系列

    说到java的mvc框架,struts2和springmvc想必大家都知道,struts2的设计基本上完全脱离了Servlet容器,而springmvc是依托着Servlet容器元素来设计的,同时sp ...

  9. 翻译qmake文档(二) Getting Started

    翻译qmake文档 目录 原英文文档: http://qt-project.org/doc/qt-5/qmake-tutorial.html         本教程教讲授qmake基础知识.这个手册里 ...

  10. ASP.NET MVC3入门教程之参数(数据)传递

    本文转载自:http://www.youarebug.com/forum.php?mod=viewthread&tid=98&extra=page%3D1 MVC模式的参数(数据)传递 ...