iOS--Zombies

2016-03-17  本文已影响1208人  原鸣清

Zombies性能分析模版使用配置工具测量你的app的通常内存使用。关注于过度释放的“僵尸”对象,“僵尸”对象是指在被释放了之后再被访问的对象,事实上已经不存在了。

在这个模版中,这个分配工具配置了NSZombies侦查的支持。将环境变量NSZombieEnabled设置为true是一个调试方式,观察编译器设置NSZombie作为任何被过度释放的“僵尸”对象(引用技术为0,已经不存在了)的代替品。如果一个消息被发送给这个对象(现在是一个“僵尸”对象),这个zombie会被悬挂到,应用闪退,记录暂停,一个“僵尸”对象收到了消息会话。然后你可以根据僵尸对象引用和释放的历史来准备定位是哪里的问题。

注意:

Zombies模版在使用的时候会导致内存的飙升,这是因为所有被释放的对象被僵尸对象取代,并未真的释放掉,在结束Zombies时会释放,这是预知行为,这就意味着instrument里的其它工具和Zombies是不能同时使用的,Zombies会导致其它的数据不准。包括leaks,你也不应该把它加到Zombies模版中,即使这么做了结果也没什么意义。对于iOS应用来说,在用Zombies模版时使用iOS模拟器比真机要好。

Zombies使用:

1.启动Instruments。

2.在模版选择器中,点击Zombies。

3.选择app和目标设备。

4.点击选择创建路径文档

5.点击工具栏红色圆形按钮或command+r开始记录。

6.正常使用你的app

如果一个被过度释放的对象被访问了,在timeline窗口里会被插入一个标记同时僵尸对象被会话访问出现。这表示在某个内存地址上一个僵尸对象对访问了。你可以通过点击打开和关闭Zombie Messaged Dialog(僵尸对象访问会话)

7.点击灰白色横向箭头到僵尸对象的内存地址并且显示僵尸对象详细内存历史的窗口,包括相对应的引用计数和方法调用。

8.在详细窗口选择Zombie事件(或者是其它你想研究的事件)

9.输入(Command+3)显示选择事件的栈轨迹的扩展详细区域。

10.点击Collapse按钮在扩展详细区域隐藏栈轨迹.这样更容易看到你的应用的方法。

通过用户icon标志Calls使你的app标记为黑色并置前。

11.栈轨迹区双击方法显示它的代码在Instruments中。

12.点击Xcode按钮在详细窗口顶部用于打开这代码在Xcode的编辑界面。

虽然Instruments可以帮你发现“僵尸”对象,但是你仍然需要仔细检查关系内存历史来确定并解决问题。以下是常见导致僵尸对象的情况。

*release一个已经被release或者autorelease的对象

*对象需要被retain时没有被retain

*一些调用发生在对象被release之后

(前两个在ARC中应该不会出现,第三个倒是极有可能)

最后附上一个推酷大神的教程:地址在这

上一篇下一篇

猜你喜欢

热点阅读