Mos*_*she 93 iphone objective-c nszombie ios
我已经看到建议在调试时设置NSZombieEnabled
为true
.什么是NSZombie?它是一个框架吗?一个设置?
Ada*_*ght 182
这是一个内存调试辅助工具.具体来说,当你设置NSZombieEnabled
一个对象到达保留计数0时,而不是被解除分配时,它会将自身变形为一个NSZombie
实例.每当这样的僵尸收到消息时,它就会记录警告,而不是以不可预测的方式崩溃或表现.因此,您可以调试细微的过度释放/自动释放问题,而无需在干草堆搜索中使用高级工具或精心设计的针.
这个名字是一个相当明显的戏剧,因为当物体达到保留计数0时通常被认为是"死".通过这种设置,它们继续存在于一个奇怪的半衰期中 - 既不活着也不死.就像真正的僵尸一样,除了他们吃的脑子少了.
Ken*_*ner 94
Adam在解释僵尸是什么方面做得很好,但使用环境变量并不是查找和跟踪这些变量的最佳方法.
一种更好的僵尸检测方法,就是使用仪器 - 从XCode开始,用"Run with Instrument"选择"Allocations".
然后在开始后立即停止录制,按下Allocations乐器上的"i"按钮,然后打开"启用参考计数"和"启用NSZombie Detection".现在再次在仪器中点击Record,您的应用程序将启动 - 如果发送了任何僵尸对象,则记录将停止,并且会在记录时间线中弹出一个对话框 - 您可以单击该对话框查找对象所在的每个位置保留或释放.
编辑:以前的建议是针对XCode 3,这里是XCode 4的补充:
在XCode 4.2中,有一种更简单的机制可以使用Zombie检测 - 僵尸仪器.而不是"运行"来启动应用程序,使用"配置文件",仪器选择器将出现.选择"Zombie",应用程序将开始运行 - 做任何导致崩溃的事情,会弹出一个对话框,说"Zombie Messaged".
从那里,单击对话框中的小箭头.这将获取创建,保留或释放僵尸对象的所有时间的列表.拉起侧栏,您可以转到每个条目,查看堆栈跟踪以查找负责保留计数中每个调整的代码.
Mat*_*ick 31
我同意肯德尔的补充,它非常有用,但我建议你仍然在做环境变量,所以你不要忘记它们已被启用.类似于Cocoa Dev的(现已过期)链接,我把它放在这里,所以我不会错过它:
if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled")) {
NSLog(@"ZOMBIES/AFOC ARE ENABLED!!! AAAAARRRRRRGH!!! BRAINS!!!");
}
Run Code Online (Sandbox Code Playgroud)
它非常吸引我的注意力.
归档时间: |
|
查看次数: |
33320 次 |
最近记录: |