iOS开发系列——性能优化记录

前言

本篇主要记录一下我对界面优化、时间优化和耗电优化、安装包瘦身上的一些探索。我尽量按照自己的理解来进行描述,如有不当,欢迎指正。

一、界面优化

1、卡顿原理

要了解卡顿原理,需要对帧缓冲区、垂直同步、CPU 和 GPU 几个词进行一下了解,然后综合起来,就可以得到卡顿的答案。

1.1、帧缓冲区

听起来很高大上,其实就是用来存放每一帧画面数据的一个 “仓库”,一个仓库只存放一帧画面的数据,iOS 一直是双缓存,就是有两个仓库,存当前帧数据的叫 “正式仓库”,存下一帧数据的叫 “预备仓库”。

当正式仓库的数据被取走后,两者身份交换,原来的预备仓库转正为正式仓库,原来的正式仓库变成预备仓库。

1.2、垂直同步 (VSync)

就是一个“信号”,通知 APP 该开始准备往预备仓库里存放数据了,系统过一会就要来取,这个时间大概是 16.7 毫秒。

1.3、CPU (中央处理器)

主要的工作有:正式对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制。我们可以理解为负责包裹内部的处理工作,简称 “打包”。

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:413038000,不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

推荐阅读
iOS开发——最新 BAT面试题合集(持续更新中)
1.4、GPU (图形处理器)

主要的工作有:将 CPU 计算好的内容进行变换、合成、渲染等处理,然后将渲染结果提交到帧缓冲区。我们可以理解为,对 CPU 给过来的包裹进行分类、排列等操作后,存放到仓库里去,简称 “入库”。

1.5、卡顿原理

当收到系统发过来的 VSync “信号”后,CPU 就开始对这一帧画面的数据进行 “打包”,然后交给 GPU 进行 “入库” 操作,存入到 “预备仓库” 中。

16.7 毫秒后,预备仓库转正,系统开始读取仓库里的数据,如果这个时候,仓库中的数据还没有准备好,那么系统就会大发雷霆,放弃读取仓库中的数据。

那么这个时候,因为系统的宁缺毋滥,导致了显示器上显示的还是上一帧画面,就造成了卡顿的效果。

2、优化

作为软件开发工程师的我们,既不能延长 16.7 毫秒的处理时间,也不能改变系统的脾气,那我们能做的就是尽量在这个时间内完成数据的准备。要么 “打包” 快一点,要么 “入库” 快一点,也就是针对 CPU 和 GPU 的工作进行优化,这就是性能优化的工作了。

2.1、CPU 工作之正式对象的创建和销毁
  • UITableViewCell 和 UICollectionViewCell 的复用,可以减少 cell 的创建操作;

  • 尽量使用轻量级的对象,可以减少对象的创建时间,比如在不需要事件处理的场景里,使用CALayer 比 UIView 会更加合适;

  • 表情键盘使用 UICollectionViewCell 代替 UIButton,可以减少对象的创建操作;

  • 对象不涉及UI操作,放到后台线程创建;

  • 性能敏感的界面,storyborad 的资源消耗>代码创建;

  • 推迟对象创建的时间,对象放到多个任务中,比如懒加载;

2.2、CPU 工作之对象属性的调整
  • UIView 有一个 CALyer 的属性,UIView 负责事件的处理,CALyer 负责图层的绘制和显示。需要注意的是,CALyer本身是没有属性的&#
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值