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. 【后缀数组】【poj2774】【 Long Long Message】

    题意: 求两个串的最长连续子串. 我的想法: 枚举第二个串...在第一个串的后缀数组中二分查找. 复杂度NlogN.最坏情况N^2 题解: (3)height 数组:定义height[i]=suffi ...

  2. 修改MySQL默认最大连接数

    修改MySQL默认最大连接数 MYSQL数据库安装完成后,默认最大连接数是100,一般流量稍微大一点的论坛或网站这个连接数是远远不够的,增加默认MYSQL连接数的方法有两个: 方法一: 进入MYSQL ...

  3. 伪元素::selection(怎么修改网页中被选中文本的样式)

    当我们用鼠标选中一段文字的时候我们会发现文字的颜色和背景色都改变了, 有时候设计给这种选中状态设计了其他的样式,那么我们怎么来自定义选中的文本的样式呢? 用::selection <p>我 ...

  4. xmanager 在 Windows 下远程桌面连接 麒麟

    编辑/etc/gdm/custom.conf,添加如下内容: [daemon] RemoteGreeter=/usr/libexec/gdmgreeter  注:“远程登录界面与本地登录界面相同”功能 ...

  5. Javascript进阶篇——(数组)笔记整理

    什么是数组数组是一个值的集合,每个值都有一个索引号,从0开始,每个索引都有一个相应的值,根据需要添加更多数值. <script type="text/javascript"& ...

  6. AjaxHelper创建的ajax无效,JQuery直接方法post有效,原来是Microsoft.jQuery.Unobtrusive.Ajax错误,NuGet解决

    Get-Package -ListAvailable -Filter Microsoft.JQuery Microsoft.jQuery.Unobtrusive.Ajax –Version 3.2.0

  7. <runtime> 的 <assemblyBinding> 元素

    一.<assemblyBinding> 元素 包含有关程序集版本重定向和程序集位置的信息. <assemblyBinding xmlns="urn:schemas-micr ...

  8. [转]用apache反向代理解决单外网ip对应内网多个web主机的问题

    用apache反向代理解决单外网ip对应内网多个web主机的问题 转载一个有独立外网IP,需内网服务器对外发布的例子,是应用apache虚拟主机的. 来源地址:http://www.itshantou ...

  9. C#调用WebService实例和开发(转)

    1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求, ...

  10. python- 如何return返回多个值

    函数的return 语句只能返回一个值,可以是任何类型. 因此,我们可以“返回一个 tuple类型,来间接达到返回多个值 ”. 例:   x 除以 y 的余数与商的函数 def    F1 ( x, ...