浅谈tableView内存优化行高问题
2015-08-13 14:21
225 查看
一、基本概念:tableView的cell在显示的过程是先计算行高,然后再返回cell到界面显示。tableView是继承自UIScrollView
设置行高有两种方式:一种通过tableView.rowHeight直接设置行高,这种方式的效率最高。但是返回的行高都是一样的,如果要求返回的行高不一样则需要第二种方式:通过实现代理方法动态返回每一行的行高。
提示:如果表格高度是固定的,一定不要通过代理返回行高!可以直接设置属性!!
表格 &
数据源执行的顺序
有预估行高
1>
行数,知道多少行,根据预估行高(tableView.estimatedRowHeight),计算整个
tableView 的预估 contentSize,
保证能够滚动
2>
数据源cell,获取要显示的 cell,会直接调用行高方法,返回当前行的高度
3>
行高
2.3会重复调用,一直到超出当前屏幕位置
contentSize
会有一个变化,显示的行会用计算好的行高,没有显示的行,仍然用预估行高
如果都滚动完成,contentSize
才是一个准确的值
好处,提前计算的数据量小
缺点,滚动过程中,临时计算行高,如果行高计算过于复杂,会影响性能!
没有预估行高
1>
行数,知道有多少行
2>
行高,计算每一行的行高,累加,就能够得到 contentSize
的 height
3>
数据源cell,当 cell
显示的时候,整个 tableView
的 contentSize
已经计算完毕,能够保证快速滚动!
重点:UITableView
是继承自 UIScrollView,滚动依赖于 `contentSize`
tableView.cellForRowAtIndexPath(indexPath)
通常是在表格的其他代理方法,例如:选中行中根据索引获取 cell
注意:调用的时候,cell一定已经被创建出来!因为在计算行高的时候,cell还没有被创建出来,所以不能使用此方法。一般使用
tableView.dequeueReusableCellWithIdentifier("Cell")
设置行高有两种方式:一种通过tableView.rowHeight直接设置行高,这种方式的效率最高。但是返回的行高都是一样的,如果要求返回的行高不一样则需要第二种方式:通过实现代理方法动态返回每一行的行高。
提示:如果表格高度是固定的,一定不要通过代理返回行高!可以直接设置属性!!
表格 &
数据源执行的顺序
有预估行高
1>
行数,知道多少行,根据预估行高(tableView.estimatedRowHeight),计算整个
tableView 的预估 contentSize,
保证能够滚动
2>
数据源cell,获取要显示的 cell,会直接调用行高方法,返回当前行的高度
3>
行高
2.3会重复调用,一直到超出当前屏幕位置
contentSize
会有一个变化,显示的行会用计算好的行高,没有显示的行,仍然用预估行高
如果都滚动完成,contentSize
才是一个准确的值
好处,提前计算的数据量小
缺点,滚动过程中,临时计算行高,如果行高计算过于复杂,会影响性能!
没有预估行高
1>
行数,知道有多少行
2>
行高,计算每一行的行高,累加,就能够得到 contentSize
的 height
3>
数据源cell,当 cell
显示的时候,整个 tableView
的 contentSize
已经计算完毕,能够保证快速滚动!
重点:UITableView
是继承自 UIScrollView,滚动依赖于 `contentSize`
tableView.cellForRowAtIndexPath(indexPath)
通常是在表格的其他代理方法,例如:选中行中根据索引获取 cell
注意:调用的时候,cell一定已经被创建出来!因为在计算行高的时候,cell还没有被创建出来,所以不能使用此方法。一般使用
tableView.dequeueReusableCellWithIdentifier("Cell")
相关文章推荐
- MySQL 优化
- Google排名优化的几个影响因素
- IE7降低内存和降低CPU的几个技巧
- DB2优化(简易版)
- Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架
- C#中尾递归的使用、优化及编译器优化
- 优化Ruby脚本效率实例分享
- 如何高效的使用内存
- DOS下内存的配置
- XP/win2003下发现1G的内存比512M还慢的解决方法
- mysql -参数thread_cache_size优化方法 小结
- PowerShell实现动态获取当前脚本运行时消耗的内存
- C#实现把dgv里的数据完整的复制到一张内存表的方法
- SQL语句实现查询SQL Server内存使用状况
- 详解mysql的limit经典用法及优化实例
- oracle数据库sql的优化总结
- C语言内存对齐实例详解
- SQL优化经验总结
- SQL优化技巧指南
- SQL Server优化50法汇总