一、 UITableView的每一行都市一个UITableViewCell,通过dataSource的 tableview:cellForRowAtIndexPath:方法来初始化每一行

UITableViewCell内部有一个默认的子视图:contentView,contentView是UITableViewCell所显示内容的父视图,可显示一些辅助指示视图

辅助指示视图的作用是显示一个表示动作的图标,可以通过设置UITableviewCell的accessoryType来显示,默认是

UITableViewCellAccessoryDiscloureIndicator

UITableViewCellAccessoryDetailDisclosureButton

UITableViewCellAccessoryCheckmark

还可以用过cell的accessoryView属性来自定义辅助指示视图(比如往右边放一个开关)

二、问题

cell的工作:在程序执行的时候,能看到多少条,它就创建多少条数据,如果视图滚动那么在创建新显示的内容。(系统自动调用)。

当一个cell出现在视野范围内的时候,就会调用创建一个cell。这样的逻辑看上去没有什么问题,但是真的没有任何问题吗?

当创建调用的时候,我们使用nslog打印消息,并打印创建的cell的地址。我们发现如果数据量非常大,用户在短时间内来回滚动的话,

那么会创建大量的cell,一直开辟空间,且如果是往回滚,通过打印地址,我们会发现它没有重用之前已经创建的cell,而是重新创建,开辟

新的存储空间。

那有没有什么好的解决方法呢?

三、cell的重用原理

(1) iOS设备的内存有限,如果用UITableView显示成千上万条数据,就需要成千上万个UITableViewCell对象的话,那将会耗尽iOS

设备的内存。要解决该问题,需要重用UITableViewCell对象

(2)重用原理:当滚动列表时,部分UITableviewCell会移出窗口,UITableView会将窗口外的UITableViewCell放入一个对象池中,等待

重用。当UITableCell,dataSource则会用新的数据来配置这个UITableviewCell,然后返回给UITableView,重新显示到窗口中,从而避免创建对象。

这样可以让创建的cell的数量维持在很低的水平,如果一个窗口中只能显示5个cell,那么cell重用之后,只需要创建6个cell就够了。

(3)注意点:还有一个非常重要的问题:有时候需要自定义UITableViewCell(用一个子类继承UITableViewCell),而且每一行用的不一定是

同一种UITableViewCell,所以一个UITableView可能拥有不同类型的UITableViewCell,对象池中也会有很多不同类型的UITableCell,

那么UITableView在重用用UITableViewCell时可能会得到错误类型的UITableViewCell

解决方案:UITableViewCell有个NSString *reuseIdentifier属性,可以在初始化UITableViewCell的时候传入一个特定的字符串标识

来设置reuseidentifier(一般用UITableViewCell的类别)。当UITableView要求dataSource返回UITableviewCell时,先通过一个字符

串标识到对象池中查找对应类型的UITableViewCell对象,如果有,就重用,如果没有,就传入这个字符串标识来初始化一个UITableViewCell

对象。

转载于:https://www.cnblogs.com/wmj520/p/5026619.html

IOS开发ui篇-UITableviewcell的性能问题相关推荐

  1. iOS开发UI篇—UITableviewcell的性能优化和缓存机制

    iOS开发UI篇-UITableviewcell的性能问题 一.UITableviewcell的一些介绍 UITableView的每一行都是一个UITableViewCell,通过dataSource ...

  2. iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局

    iOS开发UI篇-使用xib自定义UItableviewcell实现一个简单的团购应用界面布局 iOS开发UI篇-使用xib自定义UItableviewcell实现一个简单的团购应用界面布局 一.项目 ...

  3. iOS开发UI篇—UITableview控件基本使用

    iOS开发UI篇-UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) 1 #import <Foundation/Foundation.h&g ...

  4. iOS开发UI篇—UITableview控件使用小结

    iOS开发UI篇-UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger ...

  5. iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序

    iOS开发UI篇-使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: 1 //2 // YY ...

  6. iOS开发UI篇—实现UITableview控件数据刷新

    iOS开发UI篇-实现UITableview控件数据刷新 一.项目文件结构和plist文件 二.实现效果 1.说明:这是一个英雄展示界面,点击选中行,可以修改改行英雄的名称(完成数据刷新的操作). 运 ...

  7. iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)

    iOS开发UI篇-使用UItableview完成一个简单的QQ好友列表(一) 一.项目结构和plist文件 二.实现代码 1.说明: 主控制器直接继承UITableViewController // ...

  8. iOS开发UI篇-在UItableview中实现加载更多功能

    iOS开发UI篇-在UItableview中实现加载更多功能 一.实现效果 点击加载更多按钮,出现一个加载图示,三秒钟后添加两条新的数据. 二.实现代码和说明 当在页面(视图部分)点击加载更多按钮的时 ...

  9. IOS开发UI篇—导航控制器属性和基本使用

    IOS开发UI篇-导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) 1.创建一个导航控制器 UINavigationController ...

  10. android tableview实现多选功能,iOS开发UI篇-tableView在编辑状态下的批量操作(多选)...

    先看下效果图 直接上代码 #import "MyController.h" @interface MyController () { UIButton *button; } @pr ...

最新文章

  1. 结构型模式:装饰模式
  2. springboot定时任务
  3. 树莓派做一个dns缓存
  4. 加速你的IDE !!!送9个固态硬盘(金士顿240G SSD)
  5. 2017百度之星程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】...
  6. 【Redis】Redis 使用 redisson 做分布式锁 复盘 maven 依赖 netty 冲突
  7. 另一种“人老心不老”
  8. 关于iOS和OS X废弃的API知识点
  9. IBM核心软件如何应对“互联网+”的技术挑战
  10. 运算放大电路设计实验
  11. 虚拟基础架构管理——直接通过 VMware vCenter 管理 NetApp 存储操作
  12. matlab fspecial disk,Matlab fspecial 用法详述,附示例
  13. 汽车加油问题 java_汽车加油问题
  14. 基于卡方分布的独立性检验
  15. oracle sql 不等 优化6,oracle sql 优化(三)
  16. 计算机二级ms模拟题在线,全国计算机二级MSoffice高级应用模拟试题及答案
  17. 【信息学奥赛一本通】题解大全
  18. 二叉排序树查找成功和不成功的平均查找长度
  19. 关于固定定位position: fixed;和横向滚动overflow-x: scroll;无法同时使用的问题
  20. [转载]计算机视觉牛人(转载)(最早在自动化所论坛上发现的)

热门文章

  1. webpack4.x实战六,处理图片
  2. 竞价推广账户日常优化需要注意十大要点
  3. 基础算法----实现反转字符串
  4. 新一代RPC框架-GRPC
  5. OVM-V1.2正式发布,新增实时监控功能,支持一键升级
  6. 手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染
  7. ProgressBar进度条使用注解
  8. 配置Nginx不同域名访问不同项目
  9. innerHTML 插入 script 脚本正确执行的处理方式
  10. 纯CSS实现鼠标滑过缩略图放大显示代码