用Instrument优化动画性能常用功能详解

今天爱分享给大家带来用Instrument优化动画性能的经历,注意点都有什么,希望能够帮助到各位。

Instruments常用功能的使用

Leaks(泄漏)
一般的措施内存使用情况,检查泄漏的内存,并提供了所有活动的分配和泄漏模块的类对象分配统计信息以及内存地址历史记录。

Leaks 调试解决 iOS 内存泄漏的工具
迅速膨胀的内存可以很快让程序毙命,所以要多加防范。即使有 ARC(自动引用计数)内存管理机制,但在现实中对象之间引用复杂,循环引用导致的内存泄漏仍然难以避免,所以关键时刻还要自力更生。分析内存泄露不能把所有的内存泄露查出来,有的内存泄露是在运行时,用户操作时才产生的。那就需要用到 Instruments 的leaks了。

Core Animation(图形性能)
这个模块显示程序显卡性能以及CPU使用情况。

1.FPS(Frame Per Second)
2.Color Blended Layers图层混合

1.确保控件的opaque属性设置为true,确保backgroundColor和父视图颜色一致且不透明。
2.如无特殊需要,不要设置低于1的alpha值。
3.确保UIImage没有alpha通道。

3.Color Copied Images颜色格式
4.Color Misaligned Images图片大小

1.确保图片大小和frame一致,不要在滑动时缩放图片。
2.确保图片颜色格式被GPU支持,避免劳烦CPU转换。

5.Color Offscreen-Rendered Yellow离屏渲染

1.绝大多数时候离屏渲染会影响性能。
2.重写drawRect方法,设置圆角、阴影、模糊效果,光栅化都会导致离屏渲染。
3.设置阴影效果是加上阴影路径。
4.滑动时若需要圆角效果,开启光栅化。

Time Profiler(时间探查)
执行对系统的CPU上运行的进程低负载时间为基础采样。

Time Profiler分析原理
它按照固定的时间间隔来跟踪每一个线程的堆栈信息,通过统计比较时间间隔之间的堆栈状态,来推算某个方法执行了多久,并获得一个近似值。其实从根本上来说与我们的原始分析方法异曲同工,只不过其将各个方法消耗的时间统计起来。

原始的性能分析方法
这种分析方法估计是很多开发人员第一时间想到的,写个单元测试,在开始和结束的地方记录时间。示例代码:

NSDate *startDate = [NSDate date];                                                
for(int i = 0; i < 999; i++){                                                                
    // do something                                                                              
}                                                                                                          
NSDate *endDate = [NSDate date];                                                 
NSLog(@"time:%f", [endDate timeIntervalSinceDate: startDate]);

这种方法的缺点有以下几点:
1.测试效率太低,很多性能瓶颈是很难预估到的,需要从上层到下层进行逐步排除。
2.无法对界面渲染的效率进行测试,找出界面性能瓶颈。
3.NSLog的分析不够精确,可能在模拟器上由于开发设备性能速度快,无法明显区分出性能瓶颈。

使用Time Profiler前须知:
1.当点击Time Profiler应用程序开始运行后.就能获取到整个应用程序运行消耗时间分布和百分比.为了保证数据分析在统一使用场景真实运行。
2.另外在开始性能分析前另外一件重要的事情是,应用程序运行一定要发布配置 而不是调试配置。

Time Profiler的主界面(几个需要关注的重点区域)

Energy Log (耗电量监控)
APP 性能优化中,能耗优化决定了用户在同样的电量消耗情况下能使用你的 APP 多长时间。能耗优化的一般步骤如下:
1.使用 Energy Impact 查看 APP 能耗概况

2.若是存在高能耗情况,使用 Instruments 的 Energy Log 模板进行细致验证,并配合 Time Profiler 模板抓取代码的运行细节。

Energy Log 模板添加Time Profiler定位代码

3.根据代码的运行细节,判断潜在的问题点,然后修改代码
4.验证修改效果,若是无效,那么重复 2 – 4 步骤

Zombies(检测僵尸对象)
测量一般的内存使用,专注于检测过度释放的野指针对象,也提供对象分配统计,以及主动分配的内存地址历史。
在程序运行期间,如果定位到僵尸对象,则会弹出一个提示对话框

人已赞赏
IOS

iOS app唤起微信进行分享时出现“未验证应用”【附代码】

2020-10-19 14:48:58

IOS

iOS开发中Debug和Release什么意思?以及区别和使用

2020-10-19 15:13:56

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
'); })();