IOS Instruments一些工具的使用

2018-05-30  本文已影响0人  Johnny_Wu

搞了大半天,按网上的步骤来操作了,但最后总是找不到内存泄漏的代码,最后发现是xcode的某个配置错了,呵呵!

在选择calltree后,可能你会发现查看不到源码从而无法定位内存泄漏的位置,只是显示16进制的数据。此时需要你在Xcode中检查是否有dSYMFile生成,如下图所示选择第二项DWARF with dSYM File.

这样配置好了之后,就可以定位代码了。

下面是简单介绍下以下的工具:TimerProfiler,Allocations和Leaks

一、 Leaks

用于检测内存泄漏。我测试了下,发现像循环运用,循环Timer不释放,这些如果重复操作,都会到导致内存增长,并且没有机会释放。但Leaks检测不到。

比如说:我在一个controller中执行

timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(timeOpt) userInfo:nil repeats:YES];

创建一个循环的timer,并且返回的时候,没有主动释放timer,那么这个controller是不会被释放的,不断进入返回controller就会导致内存增长,但检测不出来,可能系统认为这不是内存泄漏,只是没释放。

//内存泄漏

char *str = (char *)malloc(10);

strcpy(str, "sdfdf");

这个内存泄漏可检测到:

配置如切图,选择CallTree,可看到发生内存泄漏的方法,上图选中标记处。如何双击此处就可以定位到代码了: 使用起来很方便。

二、Allocations

程序内存分布,可以看到每部分占用多少内存。

可以看到每部分占用多少内存,上面可看到我的[ViewController btnAction]方法里面占用内存比较大,就点进去看看咯:

原来是获取图片,确实占用比较多内存!!

三、Timer Profiler

这个工具我还是比较喜欢的,可以帮我们查找占用时间比较多的代码,对代码的优化有很大的帮助,用法其实也是差不多,我直接截图,你一看就懂了:

可以清楚看到每部分的时间,占的比例。点btnAction方法看看:

上一篇下一篇

猜你喜欢

热点阅读