美文网首页
iOS---性能优化

iOS---性能优化

作者: iOS程序媛ing | 来源:发表于2020-09-14 19:08 被阅读0次

    项目中影响性能的主要有一下几方面:卡顿、耗电、网络、启动优化

    一、卡顿

    造成卡顿的原因是发生vsyn信号时,GPU没有渲染完成。首先我们先了解一下界面渲染
    CPU:负责处理事件,对象的创建和销毁、对象的属性设置、布局计算、文本计算、图片的格式转换和解码,图像的绘制。
    GPU:负责纹理渲染
    解决办法:尽量减少CPU和GPUD的资源消耗。

    CPU

    • 不需要与用户交互的情况下,使用CALayer代替UIView
    • 尽量减少修改对象的属性,如frame
    • 图片大小尽量与imageview的大小一致
    • 控制好线程开辟数量
    • 耗时操作放到子线程中:文本计算、图片转码、绘制

    GPU

    • 减少离屏渲染(设置圆角、边框等都会离屏渲染)
    • 减少视图数量和层次
    • 尽量不使用透明视图(alpha <0.01)
    • 尽量避免段时间内显示大量图片
    离屏渲染

    GPU有两种渲染方式
    当前渲染:在当前缓冲区渲染。
    离屏渲染:在当前屏幕缓冲区外另外开辟一块缓冲区渲染。
    离屏渲染耗费性能的原因:
    离屏渲染需要从当前屏幕离屏,渲染结束后需要将渲染结果从离屏带回当前屏幕显示,离屏到回到当前屏幕非常消耗性能;

    卡顿检测

    可以通过监测runloop从进入等待到重新唤起的时间间隔,判断是否卡顿

    二、耗电

    耗电的主要来源有:

    • 定位
    • 网络请求
    • 图像渲染
    • CPU
    耗电优化
    • 定位
      • 在不需要定位的情况下关闭定位,
      • 如果只是需要快速定位用户,用 CLLocationManager 的 requestLocation 方法定位,定位完成后,定位硬件会自动断电;
        -若不是导航应用,尽量不要实时更新位置,并为完毕就关掉定位服务;
        尽量降低定位精度,如不要使用精度最高的 KCLLocationAccuracyBest;
        需要后台定位时,尽量设置 pausesLocationUpdatesAutomatically 为 YES,若用户不怎么移动的时候,系统会自暂停位置更新;
    • 网络请求:
      • 设置合理的超时时间;
      • 允许用户取消长时间不响应的网络请求;
      • 使用缓存;
      • 网络不可用时,不进行网络请求;
      • 批量下载或传输;

    相关文章

      网友评论

          本文标题:iOS---性能优化

          本文链接:https://www.haomeiwen.com/subject/tnsnektx.html