1、UITableView的简单认识

  > UITableView最核心的思想就是UITableViewCell的重用机制。简单的理解就是:UITableView只会创建一屏幕(或一屏幕多一点)的UITableViewCell,其他都是从中取出来重用的。

  > 知道UITableViewCell的重用原理后,我们来看看UITableView的回调方法。UITableView最主要的两个回调方法是tableView:cellForRowAtIndexPath:和tableView:heightForRowAtIndexPath:。理想上我们是会认为UITableView会先调用前者,再调用后者,因为这和我们创建控件的思路是一样的,先创建它,再设置它的布局。但实际上却并非如此,我们都知道,UITableView是继承自UIScrollView的,需要先确定它的contentSize及每个Cell的位置,然后才会把重用的Cell放置到对应的位置。所以事实上,UITableView的回调顺序是先多次调用tableView:heightForRowAtIndexPath:以确定contentSize及Cell的位置,然后才会调用tableView:cellForRowAtIndexPath:,从而来显示在当前屏幕的Cell。

  > 看到这里,想必大伙也都能隐约察觉到,UITableView优化的首要任务是要优化上面两个回调方法。

2、优化思路

  > 计算和布局分离,并缓存到数据源中

model.cellHeight = [self calculateCellHeightWith:dict[@"article"]];

  > 即将停止滑动和停止滑动后开始图片的下载(模仿官方demo)

- (void)loadImagesForOnscreenRows
{
if (self.entries.count > )
{
NSArray *visiblePaths = [self.tableView indexPathsForVisibleRows];
for (NSIndexPath *indexPath in visiblePaths)
{
AppRecord *appRecord = (self.entries)[indexPath.row]; if (!appRecord.appIcon)
// Avoid the app icon download if the app already has an icon
{
[self startIconDownload:appRecord forIndexPath:indexPath];
}
}
}
}

  > 在Cell上添加系统控件的时候,实质上系统都需要调用底层的接口进行绘制,当我们大量添加控件时,对资源的开销也会很大,所以我们可以索性直接异步绘制,提高效率

  关于绘制,有两种思路来实现,一种是在Cell上添加一个UIView,调用setNeedsDisplay方法,另一种在Cell上添加UIImageView,使用UIGraphicsBeginImageContextWithOptions将绘制的内容以图片的形式返回,设置为UIImageView的图片;

  > 尽量使用代码创建Cell,而不是xib

  xib需要系统自动转码,肯定会增加一层负担

  > 其他方面

  1、使用不透明的视图。

  2、正确使用重用的机制

  3、减少视图的数量

  4、尽量动态地创建视图,而是使用hidden属性控制视图的显示与否

  

最新文章

  1. 文件随机读写专用类——RandomAccessFile
  2. django TEMPLATES
  3. SSH服务器与Android通信(3)--Android客户端发送数据
  4. python处理经过gzip压缩的网页内容
  5. JS图表组件 highcharts 简单的介绍
  6. C# tostring()汇总
  7. tensorflow Sigmoid 应用
  8. c#创建access数据库和数据表
  9. ThreadLocal 原理和使用场景分析
  10. slitaz的root密码
  11. js04-DOM对象一
  12. Latex自定义文档纸张大小
  13. JAVA导入表格功能总结
  14. [Oracle][DataGuard]Standby数据库文件有损坏时的处理方法
  15. java中Date与DateFormat的格式输出
  16. 3.SLB 回话保持功能分析
  17. Win10系统80端口被系统进程占用
  18. HDU 4576 Robot (概率 & 期望)
  19. hexo静态博客的安装及应用实践记录
  20. python3.6 利用requests和正则表达式爬取猫眼电影TOP100

热门文章

  1. C# list distinct操作
  2. 《12个有趣的C语言问答》(4)
  3. JS二维数据处理逻辑封装探究
  4. Mongodb 集群搭建以及常见错误
  5. Study notes for Discrete Probability Distribution
  6. Java7新特性
  7. [置顶] 安卓UI组件之ListView详解
  8. C# 数据库连接测试以及备份
  9. java Integer 源码学习
  10. 关于ABP——领域服务的思考