项目经验iOS开发技术iOS Crazies

Xcode 8 Instruments 学习(一)

2016-11-07  本文已影响23346人  蓝白七七

更新于:20170814

最近的几天在看一些Instruments想关的知识,总结分享一下希望对大家有所帮助:

本文章主要介绍的是 Instruments 的相关知识,以及如何使用Instruments的 Leaks 工具。 Instruments 其它的工具会在后面篇文章一一介绍.

前言介绍:

或许很多朋友对Instruments应用不太了解,但可能很多老的iOS开发者都应该用过Instruments工具来检测iOS应用内存泄漏情况。特别是在iOS 5.0之前,即苹果在iOS平台上面还没支持ARC的时候,写iOS应用就类似C语言那样,容易忘记释放内存,而内存对移动设备而言是非常可贵的。即使目前iPhone设备内存已经满足512MB了,但是因为苹果的后台模式是把整个应用封装起来等待下次启用,所以该应用所占用的内存同样被占据了。也就是即使应用进入后台模式,它还是仍然占用原先的内存的,所以你打开的应用越多,内存耗用自然也很多。对很多普通用户而言,往往他们打开的应用都是进入后台模式的,很少有用户清理后台的应用,所以也就造成很多应用其实可用内存还是非常有限地 (题外话:如果苹果原生支持一键清理后台程序就好了,貌似越狱的工具里面有这样的支持的。

还有做过iOS应用自动化测试的开发者,应该对UIAutomation很熟悉吧。它就是通过JS脚本来写界面自动化测试用例。而Instruments应用对UIAutomation支持很完善,你可以通过它查看很多代码潜在的问题,并测试性能。

其实Instruments应用还有很多强大的功能,它原生支持很多instrument工具,帮助你分析你的代码,不仅包括内存检测和自动化测试,它还可以监测文件读写操作等等。所以一个好的iOS开发者是应该掌握Instrument应用的使用。因为Instruments应用本身功能太强大的,所以完全掌握机会不可能,但是因为它们内置的很多工具具有相似性,所以基本掌握自己常用的即可。同时了解一下内部有哪些功能,这样在你需要用到的时候再查查文档,就可以很快上手了。

以上段落来源链接


正文 Instruments 的介绍:

Instruments 是一个很灵活的、强大的工具;是性能分析、动态跟踪 和分析OS X 以及iOS代码的测试工具;用它可以极为方便收集关于一个或多个系统进程的性能和行为的数据,并能及时随着时间跟踪而产生的数据,并检查所收集的数据,还可以广泛收集不同类型的数据;也可以追踪程序运行的过程,这样instrument就可以帮助我们了解用户的应用程序和操作系统的行为。

总结一下instrument能做的事情:

1.Instruments是用于动态调追踪和分析OS X和iOS的代码的性能分析和测试工具;
2.Instruments支持多线程的调试;
3.可以用Instruments去录制和回放,图形用户界面的操作过程
4.可将录制的图形界面操作和Instruments保存为模板,供以后访问使用。

或者说:

1.追踪代码中的(甚至是那些难以复制的)问题;
2.分析程序的性能;
3.实现程序的自动化测试;
4.部分实现程序的压力测试;
5.执行系统级别的通用问题追踪调试;
6.使你对程序的内部运行过程更加了解。
以上资料链接


instrument 模板虽多,但常用的就那几个(这里也只介绍几个常用的工具):

Instruments最常用的三大类(主要介绍下面这三个的操作):

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

打开步骤:

或者 点击 Xcode 的 “调试导航”

然后选中 “Memory”,再点击右侧的 “Profile in Instruments”,

会自动打开Instruments。这时候会弹出来一个对话框,

选择“Transfer” 这种方式打开


在或者你可以通过 Xcode --> Open Developer Tool --> instruments --> Leaks 的方式来打开

再或者你可以 按着control+空格键,输入instruments 打开 (meishichulaihaha)

打开后,这时界面如图:


Leaks界面讲解:

1、Record Settings (ˈrɛkɔːd 记录设置)
2、Display Settings 选项面板
3、Extended Detail 扩展面板(ɛkˈstɛnd,延展 diːteɪl,细节详情),在时间探查仪器的情况下,它是用来跟踪显示堆栈。

老版本是在右边显示:



现在是在底部左下角:



不过在左下角有调试时间间隔的

内存泄漏动态分析技巧:

1.在Display Settings 界面建议把 Snapshot Interval (snapʃɒt, 数据快照)间隔时间设置为10秒,勾选Automatic Snapshotting,Leaks会自动进行内存捕捉分析。
2.熟练使用Leaks后会对内存泄漏判断更准确,在可能导致泄漏的操作里,在你怀疑有内存泄漏的操作前和操作后,可以点击Snapshot Now进行手动捕捉。
3.开始时如果设备性能较好,可以把自动捕捉间隔设置为5秒钟。
4.使用ARC的项目,一般内存泄漏都是malloc、自定义结构、资源引起的,多注意这些地方进行分析。
5.开启ARC后,内存泄漏的原因
开启了ARC并不是就不会存在内存问题,苹果有句名言:ARC is only for NSObject。
注:如果你的项目使用了ARC,随着你的操作,不断开启或关闭视图,内存可能持续上升,但这不一定表示存在内存泄漏,ARC释放的时机是不固定的。


做一下演示:

- (IBAction)buttonClick:(id)sender {
    People * people = [[People alloc]init];
    [people retain];
    people.str = @"1324567";
}

注意:
在老版本中:
不勾选效果如下:
勾选效果如下:

在新的版本中 Call Tree 的 这些设置换了位置 在底部左下角:




新版本:



这里对右侧Display Settings中 的 Call tree 选项有必要做一下说明 [官方user guide翻译]:

需要添加其他工具的话:

进行如下操作:



关于界面的一些其他的补充:

选择 Detail -> Call Tree

表示查看整个调用过程有了上面的基础知识就可以对App的CPU消耗情况进行实时检测了。

上一篇 下一篇

猜你喜欢

热点阅读