iOSInstruments使用
iOSInstruments使⽤
⼀、Instruments介绍
Instruments ⼀个很灵活的、强⼤的⼯具,是性能分析、动态跟踪 和分析OS X以及iOS代码的测试⼯具,⽤它可以极为⽅便收集关于⼀个或多个系统进程的性能和⾏为的数据,并能及时随着时间跟踪⽽产⽣的数据,并检查所收集的数据,还可以⼴泛收集不同类型的数据.也可以追踪程序运⾏的过程,这样instrument就可以帮助我们了解⽤户的应⽤程序和操作系统的⾏为。
总结⼀下instrument能做的事情:
1. Instruments是⽤于动态调追踪和分析OS X和iOS的代码的性能分析和测试⼯具;
2.Instruments⽀持多线程的调试;
大昭寺
3.可以⽤Instruments去录制和回放,图形⽤户界⾯的操作过程
4.可将录制的图形界⾯操作和Instruments保存为模板,供以后访问使⽤。
instrument还可以:
1.追踪代码中的(甚⾄是那些难以复制的)问题;
2.分析程序的性能;
3.实现程序的⾃动化测试;
4.部分实现程序的压⼒测试;
5.执⾏系统级别的通⽤问题追踪调试;
6.使你对程序的内部运⾏过程更加了解。
打开⽅式:
Xcode -> Open Developer Tool -> Instruments
感性负载
其中⽐较常⽤的有四种:
5寸尺寸Allocations:⽤来检查内存分配,跟踪过程的匿名虚拟内存和堆的对象提供类名和可选保留/释放历史
Leaks:⼀般的查看内存使⽤情况,检查泄漏的内存,并提供了所有活动的分配和泄漏模块的类对象分配统计信息以及内存地址历史记录
Time Profiler:分析代码的执⾏时间,执⾏对系统的CPU上运⾏的进程低负载时间为基础采样
Zombies:检查是否访问了僵⼫对象
其他的:
Blank:创建⼀个空的模板,可以从Library库中添加其他模板
Activity Monitor:显⽰器处理的CPU、内存和⽹络使⽤情况统计
Automation:⽤JavaScript语⾔编写,主要⽤于分析应⽤的性能和⽤户⾏为,模仿/击发被请求的事件,利⽤它可以完成对被测应⽤的简单的UI测试及相关功能测试
Cocoa Layout:观察约束变化,出布局代码的问题所在。
Core Animation:⽤来检测Core Animation性能的,给我们提供了周期性的FPS,并且考虑到了发⽣在程序之外的动画,界⾯滑动FPS可以进⾏测试
Core Data:监测读取、缓存未命中、保存等操作,能直观显⽰是否保存次数远超实际需要
Energy Diagnostic :⽤于Xcode下的Instruments来分析⼿机电量消耗的。(必须是真机才有电量)
GPU Driver :可以测量GPU的利⽤率,同样也是⼀个很好的来判断和GPU相关动画性能的指⽰器。它同样也提供了类似Core Animtaion那样显⽰FPS的⼯具。
Network:分析应⽤程序如何使⽤TCP / IP和UDP / IP连接使⽤连接仪器。就是检查⼿机⽹速的。(这个最好是真机)
⼆、Allocations(分配)
1.内存分类:
生日礼物 创意礼品Leaked memory:泄漏的内存,如为对象A申请了内存空间,之后再也没⽤到A,也没有释放A导致内存泄漏(野指针。。。)Abandoned memory:被遗弃的内存,如循环引⽤,递归不断申请内存⽽导致的内存泄漏
Cached memory:缓存的内存
2.Abandoned memory
其中内存泄漏我们可以⽤Leaks,野指针可以⽤Zombies(僵⼫对象),⽽在这⾥我们就可以⽤Allocations来检测Abandoned memory的内存。
即我们采⽤Generational Analysis的⽅法来分析,反复进⼊退出某⼀场景,查看内存的分配与释放情况,以定位哪些对象是属于Abandoned Memory的范畴。
在Allocations⼯具中,有专门的Generational Analysis设置,如下:
抬的拼音
我们可以在程序运⾏时,在进⼊某个模块前标记⼀个Generation,这样会⽣成⼀个快照。然后进⼊、退出,再标记⼀个Generation,如下图:
致敬劳动者的句子
在详情⾯板中我们可以看到两个Generation间内存的增长情况,其中就可能存在潜在的被遗弃的对象,如下图:
其中growth就是我们增长的内存,GenerationA是程序启动到进⼊该场景增长的内存,GenerationB就是第⼆次进⼊该场景所增长的内存,查看⼦类可以发现有两个管理类造成了Abandoned memory。
3.设置Generations
使⽤instrument测试内存泄露 ⼯具 Allocations 测试是否内存泄露 使⽤标记,可以更省事省⼒的测试页⾯是否有内存泄露
1)设置Generations
2)选择mark generation
3)使⽤⽅法 在进⼊测试页⾯之前,mark⼀下----->进⼊页⾯----->退出----->mark------>进⼊------->退出------->mark------>进⼊如此往复5、6次,就可以看到如下结果
这种情况下是内存有泄露,看到每次的增量都是好⼏百K或者上M的,都是属于内存有泄露的,这时候就需要检测下代码⼀般情况下,100K 以下都属于正常范围,growth表⽰距离你上次mark的增量
三、Leaks(泄漏)
1.内存溢出和内存泄漏的区别
内存溢出 out of memory,是指程序在申请内存时,没有⾜够的内存空间供其使⽤,出现out of memory;⽐如申请了⼀个integer,但给它存了long才能存下的数,那就是内存溢出。
内存泄露 memory leak,是指程序在申请内存后,⽆法释放已申请的内存空间,⼀次内存泄露危害可以忽略,但内存泄露堆积后果很严重,⽆论多少内存,迟早会被占光。
memory leak会最终会导致out of memory!
在前⾯的ALLcations⾥⾯我们提到过内存泄漏就是应该释放⽽没有释放的内存。⽽内存泄漏分为两种:Leaked Memory 和 Abandoned Memory。前⾯我们讲到了如何到Abandoned Memory被遗忘的内存,现在我们研究的就是Leaked Memory。
以发⽣的⽅式来分类,内存泄漏可以分为4类:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。