Cell单元格的重用

iOS设备的内存有限,如果用UITableView显示成千上万条数据,就需要成千上万个UITableViewCell对象的话,那将会耗尽iOS设备的内存。要解决该问题,需要重用UITableViewCell对象

重用原理:当滚动列表时,部分UITableViewCell会移出窗口,UITableView会将窗口外的UITableViewCell放入一个对象池中,等待重用。当UITableView要求dataSource返回UITableViewCell时,dataSource会先查看这个对象池,如果池中有未使用的UITableViewCell,dataSource会用新的数据配置这个UITableViewCell,然后返回给UITableView,重新显示到窗口中,从而避免创建新对象

Cell的标识符

?还有一个非常重要的问题:有时候需要自定义UITableViewCell(用一个子类继承UITableViewCell),而且每一行用的不一定是同一种UITableViewCell,所以一个UITableView可能拥有不同类型的UITableViewCell,对象池中也会有很多不同类型的UITableViewCell,那么UITableView在重用UITableViewCell时可能会得到错误类型的UITableViewCell

?
解决方案:UITableViewCell有个NSString
*reuseIdentifier属性,可以在初始化UITableViewCell的时候传入一个特定的字符串标识来设置reuseIdentifier(一般用UITableViewCell的类名)。当UITableView要求dataSource返回UITableViewCell时,先通过一个字符串标识到对象池中查找对应类型的UITableViewCell对象,如果有,就重用,如果没有,就传入这个字符串标识来初始化一个UITableViewCell

Cell的重用代码

- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

// 1.定义一个cell的标识

static NSString *ID = @"mycell";

// 2.从缓存池中取出cell

UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:ID];

// 3.如果缓存池中没有cell

if (cell == nil) {

cell = [[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];

}

// 4.设置cell的属性...

return cell;

}

时间: 2024-10-16 18:17:44

Cell单元格的重用的相关文章

【大坑】DataGridView多线程更新修改Cell单元格卡死

今天做个小工具,因为最近经常用到DataGridView,所以这次没有选择ListView.忙活了一个小时终于完工了,先运行看看吧.咦!!!!怎么卡死了.代码应该没问题呀,用的多线程也不会卡UI线程呀,打开分析工具查看DataGridView赋值Cell单元格占用CPU达到了80~90,公司的G3260不堪重负的挂掉了. BackgroundWorker解决问题 上园子里找答案,解决办法倒是找到了几种.但是都不靠谱,一样的卡死,看到博问里面说用BackgroundWorker试试.Backgro

获得点击的button所在的cell单元格

自定义cell,button,tableView UITableView *cell = (UITableView *)[[self.btn superview] superview] ; NSIndexPath *index = [self.tableView indexPathForCell:cell]; NSLog(@"index is = %li",(long)index.row);

iOS:UITableViewCell自定义单元格

UITableViewCell:自定义的单元格,可以在xib中创建单元格,也可以在storyBorad中创建单元格.有四种创建方式 <1>在storyBorad中创建的单元格,它是静态的单元格,单元格一开始就存在,可以直接根据自定义的重用标识名加载使用: <2>当然,storyBorad中单元格也可以关联一个自定义的类,这个类必须是继承UITableViewCell,这种情况下,直接根据自定义的重用标识名加载使用也是可以的. <3>在xib中创建的单元格,如果直接通过b

Objective-C:UITableViewCell自定义单元格

UITableViewCell:自定义的单元格,可以在xib中创建单元格,也可以在storyBorad中创建单元格.有四种创建方式 <1>在storyBorad中创建的单元格,它是静态的单元格,单元格一开始就存在,可以直接根据自定义的重用标识名加载使用: <2>当然,storyBorad中单元格也可以关联一个自定义的类,这个类必须是继承UITableViewCell,这种情况下,直接根据自定义的重用标识名加载使用也是可以的. <3>在xib中创建的单元格,如果直接通过b

NPOI_winfrom导出Excel表格(合并单元格、规定范围加外边框、存储路径弹框选择)

1.导出 1 private void btn_print_Click(object sender, EventArgs e) 2 { 3 DataTable dtNew = new DataTable(); 4 5 dtNew.Columns.Add(new DataColumn("commodity_name", typeof(object))); 6 dtNew.Columns.Add(new DataColumn("specifications", type

【POI xlsx】使用POI对xlsx的单元格样式进行设置

涉及到的样式都在代码中有说明: 1 package com.it.poiTest; 2 3 import java.io.FileNotFoundException; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 7 import org.apache.poi.hssf.util.HSSFColor; 8 import org.apache.poi.sl.usermodel.Sheet; 9 import o

NPOI随笔——图片在单元格等比缩放且居中显示

NPOI导出的图片默认是在单元格左上方,这使得图片在单元格显示得很难看.居中,且等比缩放,才是图片在单元格上的完美展示. /// <summary> /// 图片在单元格等比缩放居中显示 /// </summary> /// <param name="cell">单元格</param> /// <param name="value">图片二进制流</param> private void Cel

NPOI 图片在单元格等比缩放且居中显示

NPOI导出的图片默认是在单元格左上方,这使得图片在单元格显示得很难看.居中,且等比缩放,才是图片在单元格上的完美展示. /// <summary> /// 图片在单元格等比缩放居中显示 /// </summary> /// <param name="cell">单元格</param> /// <param name="value">图片二进制流</param> private void Cel

定制单元格-cell

在我们接触到的app中,大部分的都是有tableView来显示信息的,如此,就需要有TableViewCell进行数据的显示.下面介绍3种定制的方法. 首先创建一个BaseTableViewController继承于UITableViewController,并显示数据,点击cell跳转到对应的controller,显示数据. 其中Model数据代码如下: @property(nonatomic,copy)NSString *title; @property(nonatomic,copy)NSS