UITableView是在iOS开发中最常用的控件之一。我的第一篇学习心得献给它了
        UITableView是由一行一行的UITableViewCell构成的。
        首先想这样一个问题:现在用UITableView去做一个联系人列表,如果我有10个100个联系人,那我可以建10个100    个UITableViewCell,但是如果有一千一万个呢,创建这么多Cell是不是会很影响手机的性能并且造成不好的用户体验呢?
        因此,苹果官方给出的解决方案是采用复用机制。
        什么是复用机制?简单点回答:如果有我就用,没有我就创建。就比如吃饭需要用筷子,如果现在我家里有筷子当然我就用家里的筷子,如果家里没有筷子我就去买筷子。买了筷子当然不会用一次,买了之后下次就是用买的筷子。当然这个例子不是特别恰当,领会精神为主。说不用筷子用勺子或者用一次性筷子的我不想看见你们。
        来看看UITableViewCell创建的标准代码:
    static NSString *CellTableIdentifier = @"only";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellTableIdentifier];
    if (cell == nil) {
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellTableIdentifier] autorelease];
}
我们这样来理解:
如果有100行cell,根据cell高度和屏幕高度,我们每次只能显示10行cell,我们在滑动屏幕时,我们已经创建的cell会被划没看不见,但是它们并没有消失,而是相当于进入一个复用的队列。然后当需要新建cell的时候,先到这个复用队列里看看,如果有的话,我们就去复用队列里取出这个cell使用,如果没有的话我们才去真正的创建一个,这样就避免了多次重复的创建UITableViewCell,对内存空间的使用起到了很好的控制作用。
 
static NSString *CellTableIdentifier = @"only";
        这行代码定义了一个静态的字符串,用来当做cell的标识,static 关键字保证了唯一性
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellTableIdentifier];
        接下来就该创建cell了。根据我们的逻辑,如果复用队列中有可用的cell的话,我们是优先使用的,因此,我们首先要去复用队列中寻找是否有我们需要的可用的cell,所以当前的tableView调用dequeueReusableCellWithIdentifier方法,参数就是我们定义的标识。如果复用队列中有可用的cell,那么返回值就是这个可用的cell,如果没有的话返回的是个nil。
 
        第一次我们什么都没有, 所以必然返回的是nil,因而进入到if的判断条件中,在这里,才是我们真正的的第一次去创建cell。
cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellTableIdentifier] autorelease];
        可以看到,我们在内存中为cell开辟了新的空间,生成新的cell,同时为cell附上它独有的标识符,在它进入到复用队列里以后,我们通过标识符来寻找我们所需要的cell。

iOS学习心得——UITableViewCell的复用的更多相关文章

  1. iOS学习心得——UINavigationController

            UINavigationController和UItableviewController一样也是iOS开发中常用的控件之一,今天就来学习一下它的常见用法.         有人说tab ...

  2. 2015最新iOS学习线路图

    iOS是由苹果公司开发的移动操作系统,以xcode为主要开发工具,具有简单易用的界面.令人惊叹的功能,以及超强的稳定性,已经成为iPhone.iPad 和iPod touch 的强大基础:iOS 内置 ...

  3. iOS学习路线图

    一.iOS学习路线图   二.iOS学习路线图--视频篇       阶 段 学完后目标 知识点 配套学习资源(笔记+源码+PPT) 密码 基础阶段 学习周期:24天       学习后目标:    ...

  4. iOS 学习资源

    这份学习资料是为 iOS 初学者所准备的, 旨在帮助 iOS 初学者们快速找到适合自己的学习资料, 节省他们搜索资料的时间, 使他们更好的规划好自己的 iOS 学习路线, 更快的入门, 更准确的定位的 ...

  5. windows类书的学习心得(转载)

    原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千 ...

  6. iOS学习资料整理

    视频教程(英文) 视频 简介 Developing iOS 7 Apps for iPhone and iPad 斯坦福开放教程之一, 课程主要讲解了一些 iOS 开发工具和 API 以及 iOS S ...

  7. iOS 学习

    iOS 学习资料 (适合初学者) 本文资料来源于GitHub 一.视频教程(英文) Developing iOS 7 Apps for iPhone and iPad斯坦福开放教程之一, 课程主要讲解 ...

  8. iOS 学习资料汇总

    (适合初学者入门) 本文资料来源于GitHub 一.视频教程(英文) Developing iOS 7 Apps for iPhone and iPad斯坦福开放教程之一, 课程主要讲解了一些 iOS ...

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

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

随机推荐

  1. Oracle DBlink的创建-查看与删除

    DBlink常用于在两个Oracle数据库之间相互连接,如手工同步数据时,DBLink是最方便快捷的手段之一. 1.创建DBLink语法:create public database link < ...

  2. js继承 prototype和constructor

    function a(){                 this.name="aaa";             }             function b(){     ...

  3. 使用FindControl("id")查找控件 返回值都是Null的问题

    做了一个通过字符串ID查找页面控件并且给页面控件赋值的功能,过程中遇到了this.FindControl("id")返回值都是Null的问题,记录一下解决办法. 问题的原因是我所要 ...

  4. SpringMVC(一) —— 入门

    SpringMVC原理图: 步骤: 首先用户发送请求.——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程 ...

  5. google visit

    http://emuch.net/bbs/viewthread.php?tid=7630684&fpage=3&target=blank 内Facebook,twitter,dropb ...

  6. HAProxy+Keepalived+PXC负载均衡和高可用的PXC环境

    HAProxy介绍 反向代理服务器,支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服 ...

  7. PHP扩展开发之简单类开发

    接下来我们要用扩展的形式实现以下类(演示环境:linux.php-5.5.34-src) <?php class Person { private $_name; public function ...

  8. PHP学习笔记13淘宝接口开发一例(tmall.items.discount.search),PHP

    程序设计,因为接口是有请求次数限制的,正式接口也只有2W次每天的请求次数,所以我们需要把从接口返回的数据缓存起来. 采用的接口是http://api.taobao.com/apidoc/api.htm ...

  9. Dragon Balls--hdu3635(并查集)

    Dragon Balls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  10. 如何重载浏览器 onload 事件后加载的资源文件

    http://www.oschina.net/translate/reloading-post-onload-resources?lang=eng 怎么在webview中加载本地jquery.mi.j ...