iOS设备的内存有限,如果用UITableView显示成千上万条数据,

就需要成千上万个UITableViewCell对象的话,

那将会耗尽iOS设备的内存。要解决该问题,需要重用UITableViewCell对象。

(苹果一向很注重的应用的性能优化和用户的体验)

重用原理:

当滚动列表时,部分UITableViewCell会移出窗口,

UITableView会将窗口外的UITableViewCell放入一个对象池中,等待重用。

当UITableView要求dataSource返回UITableViewCell时,

dataSource会先查看这个对象池,

如果池中有未使用的UITableViewCell,dataSource会用新的数据配置这个UITableViewCell,然后返回给UITableView,重新显示到窗口中,从而避免创建新对象。

还有一个非常重要的问题:
有时候需要自定义UITableViewCell(用一个子类继承UITableViewCell),而且每一行用的不一定是同一种UITableViewCell(如QQ,短信聊天布局),
所以一个UITableView可能拥有不同类型的UITableViewCell,
对象池中也会有很多不同类型的UITableViewCell,
那么UITableView在重用UITableViewCell时可能会得到错误类型的UITableViewCell!
 
 

解决方案:

UITableViewCell有个NSString *reuseIdentifier属性,可以在初始化UITableViewCell的时候传入一个特定的字符串标识来设置reuseIdentifier(一般用UITableViewCell的类名)。当UITableView要求dataSource返回UITableViewCell时,先通过一个字符串标识到对象池中查找对应类型的UITableViewCell对象,如果有,就重用,如果没有,就传入这个字符串标识来初始化一个UITableViewCell对象。

                                                                清澈Saup

最新文章

  1. VS2012创建UML项目
  2. PHP之验证码识别
  3. nginx worker_processes 配置
  4. 使用 universalimageloader 缓存图片的配置类及使用方法
  5. BZOJ4970 : [ioi2004]empodia 障碍段
  6. 1.1.21 Word修改文章目录
  7. sysbench write and read only
  8. 微信WebView关闭后本地cookie无法清除问题
  9. centos7 使用rsync 实现文件同步
  10. collectd 检测cpu使用率
  11. Centos7.03搭建JDK、Tomcat、MySql环境
  12. NSNull floatValue intValue 找不到指定方法解决方式
  13. springboot工程添加404页面
  14. pom配置详解
  15. SVG.js Marker标记和自定义标签
  16. JIT编译器
  17. Python开发【模块】:re正则
  18. CASIO 5800P计算器游戏--猜数字游戏
  19. markdown页面内跳转
  20. [笔记][SQL] 连接join

热门文章

  1. openWrt libubox组件之uloop原理分析
  2. 回顾爬虫的时候的一些小TIPS
  3. html中iframe根据子页面内容动态修改高度
  4. ORB-SLAM(六)MapPoint与Map
  5. andriod学习二 设置开发环境
  6. NNLearning阶段性总结01
  7. lesson 21 Daniel Mendoza
  8. Siki_Unity_0_Unity A计划直播视频
  9. UniMelb Comp30022 IT Project (Capstone) - 2.Vuforia in Unity
  10. OIDC in Angular 6