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的重用机制。

 
 

iOS学习笔记(4) — UITableView的 重用机制的更多相关文章

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

    UITableView中的cell是动态的,在使用过程中,系统会根据屏幕的高度(480)和每个cell的高度计算屏幕中需要显示的cell的个数.比如,cell高度为90.那么480 / 90 = 5  ...

  2. iOS学习笔记之UITableViewController&UITableView

    iOS学习笔记之UITableViewController&UITableView 写在前面 上个月末到现在一直都在忙实验室的事情,与导师讨论之后,发现目前在实验室完成的工作还不足以写成毕业论 ...

  3. iOS学习笔记20-地图(二)MapKit框架

    一.地图开发介绍 从iOS6.0开始地图数据不再由谷歌驱动,而是改用自家地图,当然在国内它的数据是由高德地图提供的. 在iOS中进行地图开发主要有三种方式: 利用MapKit框架进行地图开发,利用这种 ...

  4. IOS学习笔记48--一些常见的IOS知识点+面试题

      IOS学习笔记48--一些常见的IOS知识点+面试题   1.堆和栈什么区别? 答:管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制:对于堆来说,释放工作由程序员控制,容易产生memor ...

  5. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  6. iOS学习笔记总结整理

    来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...

  7. iOS学习笔记之ARC内存管理

    iOS学习笔记之ARC内存管理 写在前面 ARC(Automatic Reference Counting),自动引用计数,是iOS中采用的一种内存管理方式. 指针变量与对象所有权 指针变量暗含了对其 ...

  8. IOS学习笔记06---C语言函数

    IOS学习笔记06---C语言函数 --------------------------------------------  qq交流群:创梦技术交流群:251572072              ...

  9. [置顶] iOS学习笔记47——图片异步加载之EGOImageLoading

    上次在<iOS学习笔记46——图片异步加载之SDWebImage>中介绍过一个开源的图片异步加载库,今天来介绍另外一个功能类似的EGOImageLoading,看名字知道,之前的一篇学习笔 ...

随机推荐

  1. HTTP的缺点与HTTPS

    a.通信使用明文不加密,内容可能被窃听 b.不验证通信方身份,可能遭到伪装 c.无法验证报文完整性,可能被篡改 HTTPS就是HTTP加上加密处理(一般是SSL安全通信线路)+认证+完整性保护

  2. 级数求和(C++)

    题目描述 已知:Sn​=1+1/2+1/3+…+1/n.显然对于任意一个整数K,当n足够大的时候,Sn​大于K. 现给出一个整数K(1≤K≤15),要求计算出一个最小的n:使得Sn​>K. 输入 ...

  3. 运用 node + express + http-proxy-middleware 实现前端代理跨域的 详细实例哦

    一.你需要准备的知识储备 运用node的包管理工具npm 安装插件.中间件的基本知识: 2.express框架的一些基础知识,知道如何建立一个小的服务器:晓得如何快速的搭建一个express框架小应用 ...

  4. 零基础入门学习Python(5)--闲聊之Python的数据类型

    前言 本次主要闲聊一下python的一些数值类型,整型(int),浮点型(float),布尔类型(bool),还有e记法(科学计数法),也是属于浮点型. 数值类型介绍 整型 整型就是我们平时所说的整数 ...

  5. linux虚拟环境搭建

    一.virtualenv的安装与使用 1.安装virtualenv pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualen ...

  6. selenium--driver.switchTo()-----转

    https://www.cnblogs.com/clairejing/p/9499223.html 在自动化测试中,会遇到多窗口.多iframe.多alert的情况.此时,会使用driver.swit ...

  7. 笔记——collections模块

    collections模块 collections模块在内置数据类型(dict.list.set.tuple)的基础上,还提供了几个额外的数据类型:ChainMap.Counter.deque.def ...

  8. 【01】什么是AJAX

    什么是AJAX   AJAX(异步 JavaScript 和 XML)是 synchronous(英[ˈsɪŋkrənəs]) JavaScript and XML 的简称. AJAX不是一门新的编程 ...

  9. 九度oj 题目1075:斐波那契数列

    题目1075:斐波那契数列 时间限制:5 秒 内存限制:32 兆 特殊判题:否 提交:3641 解决:2100 题目描述: 编写一个求斐波那契数列的递归函数,输入n值,使用该递归函数,输出如样例输出的 ...

  10. hdu 4770 状压+枚举

    /* 长记性了,以后对大数组初始化要注意了!140ms 原来是对vis数组进行每次初始化,每次初始化要200*200的复杂度 一直超时,发现没必要这样,直接标记点就行了,只需要一个15的数组用来标记, ...