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. CentOS 7.0 systemd代替service

    CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Linux标准 ...

  2. 查看mysql apache php nginx的编译参数

    查看mysql编译参数: cat /usr/local/mysql/bin/mysqlbug|grep configure 查看apache编译参数: cat /usr/local/apache2/b ...

  3. .NET Printer(打印)详细分析

    如果你是一名开发人员,就不应该不知道.NET Framework.它的作用在编程人员眼中是非常强大的..NET Framework打印功能都以组件的方式提供,为程序员提供了很大的方便,但是这几个组件的 ...

  4. Tomcat 改BUG之 localhost:8080 404

    经过研究,发现造成该问题的原因可能是: 1.默认的80端口被占用: 2.服务-->apache tomcat未开启: 3.有资料称,是因为设备64位或32位,和软件不匹配: 4.(也有资料说是j ...

  5. U - stl 的 优先队列 Ⅰ

    Description Given m sequences, each contains n non-negative integer. Now we may select one number fr ...

  6. Ubuntu下安装arm-linux-gcc

    安装步骤: 这里采用友善之臂发布的arm-linux-gcc-4.4.3.tar.gz软件包. 一.将压缩包arm-linux-gcc-4.4.3.tar.gz存放在opt目录下. 执行解压命令:su ...

  7. 复习篇(一)Activity的生命周期和启动模式

    (一)关于<intent-filter>中的<data> 当设置<data>过滤器的时候,使用intent的时候必须要设置响应的匹配,否则无法匹配成功.不过不设置则 ...

  8. ——转 token 介绍

    学习Token Token是什么? Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Tok ...

  9. C# 弗洛伊德(Floyd)算法

    弗洛伊德(Floyd)算法 主要是用于计算图中所有顶点对之间的最短距离长度的算法,如果是要求某一个特定点到图中所有顶点之间的最短距离可以用;        ;    ;    ;            ...

  10. uva 10026 Shoemaker's Problem _贪心

    题意:鞋匠现在有n个工作要做,每个工作要x天,没延迟一天需要付款y,鞋匠每天只能做一个工作,问使得鞋匠最少赔款的工作顺序. 思路:工作和工作之间排序,如果a.value*b.day>b.valu ...