提升含有动态高度UITableViewCell的UITableView的运行效率
来源:互联网 发布:ansys软件16.0 编辑:程序博客网 时间:2024/03/29 01:39
http://pizi.me/66
提升含有动态高度UITableViewCell的UITableView的运行效率
在使用UITableView的时候可能会遇到这种情况:UITableViewCell中的内容来自网络端,可能需要根据内容的生成高度不一致的UITableViewCell。本文介绍一种常用方式,并且给出一定优化的建议。
1.常规解决方式
UITableView 需要实现 delegate中的 cell的高度定义
以及 dataSource 中的
返回具体cell的函数。但是 heightForRowAtIndexPath 的代理总是先于cellForRowAtIndexPath 调用, 因此这里有一个小矛盾,即,需要返回 cell 高度的时候,实际的cell还没填入内容。
一般的解决方式是,在 cell 中使用一个方法
或者其他的类似方法先根据内容计算一遍Cell的高度,然后在实际Cell生成的时候,再把内容填进去。
在这里,实际上对于同一条数据,内容被加载了两次,从而造成了运力的浪费;在计算富文本或者大量数据的时候,UITableView会出现卡顿现象。
2.使用NSCache
NSCache 一言蔽之是一个很傻瓜式的缓存控件,存取方式类似于NSDictionary,工作方式与苹果的内存管理体系相一致,在内存吃紧的时候,它会自动释放存储的对象。所以,你项目中任何你称之为缓存却不是 NSCache
对象的东西都应该被换成 NSCache
。(在使用它之前,我自己写了很多带cache的NSArray 或者 NSDictionary,现在想来,这些都是不合理的)。
在这里,我们需要做的,就是在计算高度的时候就生成一个UITableViewCell 并存入 NSCache , 需要返回 Cell 时 先从缓存池中寻找那个Cell;如果没有找到,则使用UITableView 的重用机制重用;如果还是找不到可用重用的Cell,那只有新建一个UITableViewCell。
部分代码
这里使用 “indexPath.section- indexPath.row” 作为Key, YQTableViewCell 为自定义Cell ,_cellCache为一个NSCache 对象。
小演示 :Demo Zip
注意,因为 使用 “indexPath.section- indexPath.row”,所以如果数据长度发生改变,如增加了数据等,则需用 将 _cellCache 清空。
文章导航
- 20条评论
- 4条新浪微博
- 提升含有动态高度UITableViewCell的UITableView的运行效率
- UITableViewCell的动态高度
- UITableViewCell的动态高度
- UILabel (UITableViewCell的动态高度)
- 动态调整UITableViewCell的高度
- 动态调整UITableViewCell的高度
- 动态设置UITableViewCell的高度
- CYC-UITableViewCell的动态高度
- 动态调整UITableViewCell的高度
- UITableViewCell高度的动态计算
- 动态计算UITableViewCell的高度
- 动态设置uitableView的高度
- 提升ListView的运行效率
- 提升ListView的运行效率
- 提升ListView的运行效率
- 提升ListView的运行效率
- 提升ListView的运行效率
- 动态计算UITableViewcell的高度的实现
- 1算法---插入排序
- Android蓝牙开发经验总结(一)
- 动态改变UITableView中的Cell高度
- 阿里云内网文件传输总结
- 黑马程序员_java基础_io流
- 提升含有动态高度UITableViewCell的UITableView的运行效率
- COCOS学习笔记--Cocos3.x引擎开发环境搭建
- vijos P1213机器分配(只求出了值 没有求出怎样分配)//(更新了 优化了代码并且求出了分配方案)
- 第14部视频CC2538 TinyOS的zigbee路由实验 blip+Roll路由
- Google支付(In-app Billing)接入
- 网络爬虫原理一
- android appcompat-v7包引发的错误
- js页面加载之前触发的事件
- C++stringstream用法简介