iOS学习笔记(4) — UITableView的 重用机制
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的 重用机制的更多相关文章
- iOS学习笔记(4)— UITableView的重用机制
UITableView中的cell是动态的,在使用过程中,系统会根据屏幕的高度(480)和每个cell的高度计算屏幕中需要显示的cell的个数.比如,cell高度为90.那么480 / 90 = 5 ...
- iOS学习笔记之UITableViewController&UITableView
iOS学习笔记之UITableViewController&UITableView 写在前面 上个月末到现在一直都在忙实验室的事情,与导师讨论之后,发现目前在实验室完成的工作还不足以写成毕业论 ...
- iOS学习笔记20-地图(二)MapKit框架
一.地图开发介绍 从iOS6.0开始地图数据不再由谷歌驱动,而是改用自家地图,当然在国内它的数据是由高德地图提供的. 在iOS中进行地图开发主要有三种方式: 利用MapKit框架进行地图开发,利用这种 ...
- IOS学习笔记48--一些常见的IOS知识点+面试题
IOS学习笔记48--一些常见的IOS知识点+面试题 1.堆和栈什么区别? 答:管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制:对于堆来说,释放工作由程序员控制,容易产生memor ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记总结整理
来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...
- iOS学习笔记之ARC内存管理
iOS学习笔记之ARC内存管理 写在前面 ARC(Automatic Reference Counting),自动引用计数,是iOS中采用的一种内存管理方式. 指针变量与对象所有权 指针变量暗含了对其 ...
- IOS学习笔记06---C语言函数
IOS学习笔记06---C语言函数 -------------------------------------------- qq交流群:创梦技术交流群:251572072 ...
- [置顶] iOS学习笔记47——图片异步加载之EGOImageLoading
上次在<iOS学习笔记46——图片异步加载之SDWebImage>中介绍过一个开源的图片异步加载库,今天来介绍另外一个功能类似的EGOImageLoading,看名字知道,之前的一篇学习笔 ...
随机推荐
- CAD参数绘制椭圆(网页版)
在CAD设计时,需要绘制椭圆,用户可以设置椭圆的基本属性. 主要用到函数说明: _DMxDrawX::DrawEllipse 绘制椭圆.详细说明如下: 参数 说明 DOUBLE dCenterX 椭圆 ...
- 学习React从接受JSX开始
详情参考官方JSX规范 虽然JSX是扩展到ECMAScript的类XML语法,但是它本身并没有定义任何语义.也就是说它本身不在ECMAScript标准范围之内.它也不会被引擎或者浏览器直接执行.通常会 ...
- VIM基础操作方法汇总
学习自小甲鱼的视频,快速入门vim 目录: 1.光标移动 2.进入插入模式 3.进入普通模式 4.进入命令行模式 5.退出 6.光标跳跃 7.快速跳转行号 8.删除 9.利用数字重复操作 10.撤回 ...
- manacher马拉车算法
Manacher算法讲解 总有人喜欢搞事情,出字符串的题,直接卡掉了我的40分 I.适用范围 manacher算法解决的是字符串最长回文子串长度的问题. 关键词:最长 回文 子串 II.算法 1.纯暴 ...
- 91-Williams' Percent Range 威廉指标.(2015.7.4)
Williams' Percent Range 威廉指标 ~计算: %R = (HIGH(i-n)-CLOSE)/(HIGH(i-n)-LOW(i-n))×100 注解:CLOSE: 当前时段的收盘价 ...
- zoj4710暴力
#include<stdio.h> #include<string.h> #define N 110 int map[N][N]; int main() { int n,m,k ...
- codevs1128 导弹拦截
题目描述 Description 经过11 年的韬光养晦,某国研发出了一种新的导弹拦截系统,凡是与它的距离不超过其工作半径的导弹都能够被它成功拦截.当工作半径为0 时,则能够拦截与它位置恰好相同的导弹 ...
- Tyvj 1176 火焰巨魔的惆怅
Tyvj 1176 火焰巨魔的惆怅 背景 TYVJ2月月赛第一道 巨魔家族在某天受到了其他种族的屠杀,作为一个英雄,他主动担任了断后的任务,但是,在巨魔家族整体转移过后,火焰巨魔却被困住了,他出逃的方 ...
- web文件管理系统和日志实时监控工具
https://blog.csdn.net/xuesong123/article/details/52752384
- 联想M7400打印机加粉墨了还是显示没有粉墨
联想M7400打印机加粉墨了还是显示没有粉墨?想必有很多的办公人士发现这个难题吧.其实很简单的! 先说下打印机的原理,打印机粉墨一边用的时候系统也在计数,当我们打印机加好墨后但打印机是不知道已经加好 ...