博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS学习笔记(4) — UITableView的 重用机制
阅读量:6240 次
发布时间:2019-06-22

本文共 1559 字,大约阅读时间需要 5 分钟。

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

UITableView中的cell是动态的,在使用过程中,系统会根据屏幕的高度(480)和每个cell的高度计算屏幕中需要显示的cell的个数。比如,cell高度为90。那么480 / 90 = 5 + 1,也就是说最多有6个cell能显示在屏幕中。

  系统会创建1个cel池,无论tableview有多少行都只创建6个cell放在池中。当某行移出屏幕的时候,将这个cell放回在池中;当某行需要显示在屏幕中时,从池中取出一个cell。

 

  重用机制需要制定一个cellIdentifier(行标识)来区分所需要的不同种类的cell,如果是同一类型的cell只需要制定一个identifier。

  可以对cell进行操作,改变属性如文字、背景图片,但是不能改变其本身,不能把它转化成另一个类型的对象。如果有这个需要应该制定两个或多个cellIdentifier。

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(
NSIndexPath 
*)indexPath
{
    
static 
NSString 
* aCellIdentifier = @
"CELLIDENTIFIERl"
;
    
CustomCell*ell=(CustomCell*)[tableView] dequeueReusableCellWithIdentifier:aCellIdentifier];
 
    
if 
(cell ==
nil
)
    
{
            
cell = [[[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: aCellIdentifier] autorelease];   <br>  } <br>  cell.title = [
NSString 
stringWithFormat:@”标题 %d”,indexPath.row]; <br>  
return 
cell; <br>}

  代码分析:

  CustomCell继承自UITableCell。

  CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];它的文档说明如下:returns a reusable table-view cell object located by its identifier。它返回的是一个受identifier管理定位的可重用的tableViewCell,这里重点就在于“可重用”这3个字上。

  在这个例子中,if(cell == nil){}中的语句只执行了6次,前6次池里面没有cell取出的cell都是nil,6次之后从池里可以取出cell,条件不成立直接执行之后的语句。

  重用机制的好处是显而易见的,无论tableview有多少行都只创建屏幕能显示的行数。节省了内容。由于有缓存池实现了cell的重用,避免了反复的alloc、release。

  UITableView开发时可利用的优化点。

  1、所有cell通用的属性放在自定义cell里这样可以节省系统开销,如背景图片。

  2、如果cell只有少数几个种类,则用不同的cellIdentifier标识,避免反复操作cell的subview用内存换cpu。

  3、cell的种类不能太多,过多的cellIndentifier相当于废掉了UITableView的重用机制。

 

 
 

转载地址:http://bpdia.baihongyu.com/

你可能感兴趣的文章
【转】在控制台、WinForm项目中的嵌入mdf文件的烦恼
查看>>
【转】C51中断函数的写法
查看>>
django无法加载admin的静态内容的问题(Centos7+Nginx+uwsgi环境下)
查看>>
windows 2008 启用.NET Framework 3.5
查看>>
Linux -- Ubuntu搭建java开发环境
查看>>
MVC视图中Html常见的辅助方法
查看>>
分享一下刚刚HP电话面试。。。。。。。。我估计我挂了,不过还是要来分享一下...
查看>>
PT 转 PX
查看>>
平凡世界里的万千思绪
查看>>
(二)java环境搭建
查看>>
深入推荐引擎相关算法 - 协同过滤2
查看>>
mybatis逆向工程之配置
查看>>
使用.NET 4.0+ 操作64位系统中的注册表
查看>>
剑指offer——面试题26:判断二叉树B是否为二叉树A的子结构
查看>>
scrapy主动退出爬虫的代码片段
查看>>
ny12 喷水装置(二)
查看>>
C\C++语言细节(2)
查看>>
Jenkins持续部署-自动生成版本号
查看>>
设计模式--代理模式
查看>>
javascript基础知识--最基础的
查看>>