阅读 112

iOS性能优化完结篇 | tableview优化

本篇介绍tableview优化,项目中接触得最多的就是tableview,如果你的项目展示数据比较复杂,cell内容比较多的情况下,tableview优化就显得尤为重要,尤其是一级页面和二级页面。 本篇主要从代码和演示效果的角度来讲解优化的效果。

1. 入门级

  1. 复用,正确使用reuseIdentifier

  2. 尽量把views设置背景颜色为不透明,透明会有图层混合,增加gpu计算

    经常忘记设置uilabel.backgroundColor(设置成和父视图一样的颜色),不要[[UIColor grayColor] colorWithAlphaComponent:0.2f],要不透明, 如果uilable有中文,计算高度会有偏差,需要设置label. masksToBounds = YES

  3. 避免过于庞大的XIB。

XIB首先编码成plist或者xml存入到磁盘,加载xib文件需要耗费时间,如果是首页,内部如果有大图的情况,就会严重影响程序启动时间。具体可以通过link-map来分析.

  1. 不要阻塞主线程 UIKit这个库是苹果的一大硬伤,如果页面加载的资源比较大的情况,建议使用yykit
  2. 保证图片大小和ImageViews的大小一直,不要搞裁剪,更不要搞图片UIImageJPEGRepresentation图片解码的骚操作

6.正确使用collection 1. Arrays,index查询快,key查询很慢,插入删除慢 2. Dictionary,key查询快 3.Sets, value查询快,插入/删除也很快。 7.gzip压缩,文字压缩很显著,用的不多。

2. 中级

  1. 重用和延迟加载(lazy load)Views

     - 重用是重用控件
     - 延迟加载: 1.阅读性更好 2.只会执行一次,不会初始化多次,万无一失,
     可能viewdidload内存问题执行多次,造成内存爆增的情况。
    复制代码
  2. Cache

     - 缓存那么不大可能改变但是需要经常读取的东西,最典型的就是首页了,充分发挥你的想象。
     - 远端服务器的响应,图片,计算结果等
     - NSCache和NSDictionary类似,不同的是系统回收内存的时候NSCache会自动删掉它的内容。
    复制代码

3.处理内存警告, 移除对缓存,图片Object和其他一些可以重创建的objects的strong references.

自行补脑,怎么演示,怎么监听,自己查阅相关资料
复制代码

4.重用大开销对象

5.一些objects的初始化很慢

比如 NSCalendar,NSDateFormatter(包括formatter.dateFormat = @"yyyy-MM-dd-HH-mm-ss"设置枚举),可以使用单例来创建

  1. 避免反复处理数据,在服务器和客户端使用相同的数据结构。

7.选择正确的数据格式 解析json会比xml更快,但xml也有个好处,不需像解析json一样等到整个文档下载完成才开始解析,当你处理很大的数据的时候就会极大地降低内存消耗,增加性能,同时也能增加用户体验。

8.正确设置背景图片

-  全屏背景图,使用uiimageview
-  小的背景图,比如导航栏,头像等,使用 `[UIColor colorWithPatternImage:<#(nonnull UIImage *)#>]`
复制代码
  1. ShadowPath.最好使用CAShapeLayer而不是CALayer,硬件加速,设置阴影

10.缓存行高,数据量小

11.减少subviews的数量

- 可以减少视图之间的布局
- 可以减少图层混合
复制代码

3 高级

  1. 加速启动时间 启动后的加载页面中,不要在主线程上加载任务,庞大的xib,sb文件解析等操作
  2. 使用AutoreleasePool来释放,创建很多临时对象的objects
  3. 使用性能分析工具检测 可以参考 iOS性能优化(中)

4.高性能的画圆角,如果一个页面的圆角数量小于25个,就不用考虑优化 5.在不需要交互(手势,事件响应等)的地方,可以考虑使用CALayer取代UIView. 6.控制线程最大并发数量,并发数过多就过多的消耗内存。 7.文本处理(计算,绘制)图片处理(解码、绘制)等放子线程

4 Cell中使用NStimer复用问题

解决方案: TableView倒计时控件重用问题解决方案

参考文章:

等等

文章分类
iOS
文章标签