iOS-UITableView重用机制

关于讲解UITabel View的使用

参照 链接 http://www.bubuko.com/infodetail-974265.html

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *identifier = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (!cell) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
    }
    return cell;
}

identifier

可以看到在创建cell的时候伴随着一个identifier的绑定,这个identifier可以理解为这个cell标识,标识它属于哪个重用队列。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];

再来看这句代码,从重用队列中取出一个cell,注意传入的参数identifier,如果把重用队列比作一个房间,那么identifier就好比这个房间的门牌号,标记着要从指定的房间去找人(也就是cell)。另外,入队的时候也会根据cell的identifier放到指定的重用队列中。

可想而知,因为上面那段代码所有的cell都用了相同的identifier,所以只会在一个重用队列中进进出出。假如把代码改成这样:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString *identifier = [NSString stringWithFormat:@"cell%d",indexPath.row];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (!cell) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
    }
    return cell;
}

创建cell的时候对每个cell绑定不同的identifier,那么每个cell在入队的时候就会被放到不同的队列中,这样第一遍下拉100个cell都是后每次调用dequeueReusableCellWithIdentifier都无法在对对应重用队列中找到cell,因此要创建100个cell,这就增大了消耗。

注册cell

[_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:identifier];

可以在创建tableView的时候用这个方法注册cell,注册之后的作用是每次从重用列表中取cell 的时候,假如不存在,系统就会自动帮我们创建cell,并绑定标识符identifier。可想而知,注册之后就不需要再写这段代码了:

if (!cell) {
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}

解决列表重复混乱问题

参考文章中,用解决列表重复的3种方法。我将一下我在开发中实际解决的方案。我的需求是重用CELL ,但是数据不一样,每个CELL 的长度也是不一样的。不过需要的数据类型是一样的。重用CELL,1、清除CELL 的显示的所有数据,2、赋值CELL新数据,通过代码,重新布局cell。并计算出cell 的高度。3、在UItabeleView的控制页面,通过字典纪录cell的高度(keys 是我显示数据的唯一ID,value是cell的高度)4、在UItableView的代理方法中,

(- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath,)取出cell的高度进行赋值。

解决列表中刷新图片问题

我需求是CELL 中的图片,之前显示默认的图片,当图片 数据下载成功后,刷新当前cell的页面,显示最新图片数据,

//自定义放大,图片现在下载成功,得到通知调用的方法

-(void)reloadSelectButtonInfo

{

NSArray *cells = self.myTabelView.visibleCells; //获取当前显示的cell

for (int i = 0; i < [cells count]; i++) {

MyTableViewCell * cell = cells[i];

[cell UserIsReferenceWithShareItem];//cell 中显示图片的方法

}

}

				
时间: 2024-10-28 15:32:52

iOS-UITableView重用机制的相关文章

iOS亲测UITableView重用机制,用事实说话。

UITableView重用机制主要是依靠reuseIdentifier来辨别,以此来建立一个队列,将建好的Cell放入队列中,之后直接使用队列中的Cell,不再新建,极大的提升了TableView的重用性,同时使列表滑动时不会出现卡顿现象.TableView基本上是新手必学,我第一个熟练掌握的控件,及使用得最多的就是TableVIew,重用机制有很多地方很多人都讲过,不过我还是要从自己的角度来再次BB下.由于列表内容太长了,不方便直接在界面上截图,所以只把打印的数据拿出来. 1.重用机制Cell

IOS开发—UITableView重用机制的理解

引言 对于一个UITableView而言,可能需要显示成百上千个Cell,如果每个cell都单独创建的话,会消耗很大的内存.为了避免这种情况,重用机制就诞生了. 假设某个UITableView有100个数据需要显示,即需要100个Cell,然而屏幕中最多只能一次性显示10个Cell,那么有一个办法可以不用创建100cell,而只需要创建11(10+1)个. 理解 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowA

UI之UItableView重用机制的性能问题

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute

ios UItableView,UITableViewHeaderFooterView分组头部的重用机制,简单地仿射变换CGAffineTransform

怎样设置包括第一栏在内相同高度的section(小技巧,虽然容易但容易忽略) *第一步,在viewdidload里将尾部设为0,table.sectionFooterHeight = 0;(代理方法)- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ return 0; }虽然也可以设置尾部高度,但是设置后没有效果 第二步,调用tableView的代理方法- (CGF

iOS学习笔记(4) — UITableView的 重用机制

iOS学习笔记(4) — UITableView的 重用机制 UITableView中的cell是动态的,在使用过程中,系统会根据屏幕的高度(480)和每个cell的高度计算屏幕中需要显示的cell的个数.比如,cell高度为90.那么480 / 90 = 5 + 1,也就是说最多有6个cell能显示在屏幕中. 系统会创建1个cel池,无论tableview有多少行都只创建6个cell放在池中.当某行移出屏幕的时候,将这个cell放回在池中:当某行需要显示在屏幕中时,从池中取出一个cell. 重

IOS 控件 - UITableView 的重用机制

转载来自:http://blog.csdn.net/joiningss/article/details/6702023 一. UITableView 的重用机制: iphone重用机制是苹果为了实现大量数据显示而采用的一种节省内存的机制,比如在UITableView和ScrollView 等地方.为什么要“可重用”???对于我们的项目来说,内存控制是必不可少的,如果一个tableview有几百个cell,这个内存消耗是很大的,而且有些cell里面都有image之类的很占内存的资源存在的话,那这样

iOS基础篇(十三)——UITableView(一)重用机制

UITableView是app开发中常用到的控件,功能很强大,常用于数据的显示.在学习UITableView使用之前,我们先简单了解一下: 1.UITableView的重用机制 UITableView最核心的思想就是UITableViewCell的重用机制,对于一个UITableView而言,可能需要显示成百上千个Cell,如果每个cell都单独创建的话,会消耗很大的内存,为了避免这种情况,重用机制就诞生了. UITableView的重用机制的实现关键在于下面这个的函数:UITableViewC

UITableView 以及 UITableViewCell 的重用机制

直接上代码: // // RootViewController.m // // #import "RootViewController.h" #import "DetailViewController.h" /* TableView 作为一个空表,自身并不确定项目中需要展示的行数,显示的内容以及单元格的样式,所以需要通过代理来获取: TableView 对应的试图控制器需要遵守 UITableViewDataSource 协议,并实现两个必须实现的协议方法 1.每一

UI第九讲.UITableView表视图创建,表视图的重用机制,表视图的相关配置方法

一.UITableView表视图创建 1>.基本属性: UITableView继承自UIScrollView,所以可以滚动          表视图的每一条数据都是显示在UITableViewCell对象中          表视图可以分区显示数据,每个分区称为一个section,每一行称为row,编号都是从0始 2>.重要用法: 最重要的是两个代理方法 <UITableViewDelegate,UITableViewDataSource>(其中必须实现的是 numberOfRow