iOS性能测试实战篇(二)

内存

可分为静态分析和动态分析。
l 静态分析
Analyze
l 动态分析
Leaks
Activity Monitor
Allocations
Zombies

2.1静态分析-Analyze编译
在 xcode中长按运行按钮>Analyze,可启动代码静态分析。


图24

图25

图26
对于MRC(MannulReference Counting)项目,静态分析是必要的,对于ARC(Automatic Reference Counting) 项目,静态分析作为可选项。这项检查只覆盖代码编译时可能存在的问题,但并不能覆盖代码运行时。这时,我们还需要结合动态分析工具。
Analyze主要分析以下四种问题:
A. 逻辑错误:访问空指针或未初始化的变量等;
B. 内存管理错误:如内存泄漏等;
C. 声明错误:从未使用过的变量;
D. Api调用错误:未包含使用的库和框架。

2.2 动态分析内存工具
l Leaks
l Activity Monitor
l Allocations
l Zombies
2.2.1 内存泄漏分析工具-Leaks
profiler 你的app不再赘述。


图27

A.红色箭头处,这种红色X的地方就是内存泄露的地方;
B.接下来就可以进行内存泄露定位工作了,首先我们得找到上图有个“田”样式的图案把那个Statictics改成Call Trees你就可以看到 其右侧有一个“齿轮形状”的设置按钮。



图28

一般选中我所打箭头的两个 就可以清晰地看到,内存泄露的定位



图29
上图其实不是内存泄漏,是底层的。


2.2.2 活动监视器-Activity Monitor


图30
执行操作(进入一个页面退出后)->筛选你的app,Real Mem如果不减退,则出现内存泄漏。

2.2.3 不合理内存分析工具-Allocations
关于内存的问题,除了内存泄漏以外,还可能存在内存不合理使用的情况,也会导致IOS内存警告。
内存的不合理使用往往比内存泄漏更难发现,内存泄漏可以更多借助于工具的判断,而内存的不合理运用更多需要开发者结合代码、架构来进行分析。
明确说明一下两者的区别:
内存泄漏:是指内存被分配了,但程序中已经没有指向该内存的指针,导致该内存无法被释放,产生内存泄漏。
内存不合理运用:苹果官方称这种情况为Abandoned Memory,也就是存在已分配内存的引用,但实际上程序中不会使用,比如图片等对象加入了缓存,但缓存中的对象一直没有被使用。

     XCode提供的Instruments中的Allocation工具可以用来帮你了解内存的分配情况,当你的App收到内存警告时,首先应该用Allocation进行内存分析,了解哪些对象占x用了太多内存。

2.2.4 干掉僵尸对象–Zombies
僵尸对象,也就是我们会遇到的EXC_BAD_ACCESS错误,由于内存已经被释放,而这个对象仍旧保留这那个坏地址而导致的。
比如在不开启ARC下,下面这段代码:
NSString* hello = [NSString stringWithFormat:@"Hello"];
NSLog(@"What you say is %@",hello);
[hello release];
将其添加到贴吧视频tab:


图31

hello对象不是手动分配,而是加入到自动释放池,由释放池负责释放,所以第三行调用release时就会产生EXC_BAD_ACCESS错误。

图32

贴吧页面展示为:

图33
即崩溃了。
在开启ARC后,可以很大程度上避免产生EXC_BAD_ACCESS错误,但也是有出现可能的,比如IOS里使用了C++代码,C++部分的对象是不会有ARC来管理的。
EXC_BAD_ACCESS错误不像访问空指针一样容易定位,往往报错时很难查找到错误点,所以XCode在Instruments中提供了单独的Zombies工具来分析这类错误。

2.2.4.1 手动设置NSZombieEnabled环境变量
Zombies工具的查找原理其实和设置NSZombieEnabled环境变量的调试方式是一样的,启动Zombies后在内部设置了NSZombieEnabled为True。
启用了NSZombieEnabled的话,它会用一个僵尸来替换默认的dealloc实现,也就是在引用计数降到0时,该僵尸实现会将该对象转换成僵尸对象。僵尸对象的作用是在你向它发送消息时,就不会向之前那样Crash或者产生 一个难以理解的行为,而是放出一个错误消息,它会显示一段日志并自动跳入调试器, 因此我们就可以找到具体或者大概是哪个对象被错误的释放了。
步骤:


图34

图35

进行编译,如果出现僵尸对象,工程会崩掉。但一般不建议进行进行手动设置,而应该使用Zombies工具进行调试。
言归正传,Zombies这个工具比较简单,遇到上述那类错误,打开这个位于Instruments下的工具,直接就能帮你定位到。

2.2.4.2 Zombies****分析
使用Zombies分析的步骤:
A. 启动Instruments,选择Zombies;
B. 对之前产生EXC_BAD_ACCESS的测试用例重新运行,直到程序崩溃,如果发生EXC_BAD_ACCESS错误,会出现以下界面:

图36

  C. 通过滑动箭头来查看错误细节,例如可以看到该对象的内存操作过程,如malloc、autorelease、retain、release等操作;

D. 查看底部的详细历史,选择相应的行可以定位到相应的代码,找出产生错误的代码:
基本上通过查看Zombies工具给出的信息找出错误代码行是比较简单的,Zombies也只有在产生EXC_BAD_ACCESS错误时才有用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容