我如何在Xcode 4中为我的可执行文件设置NSZombieEnabled和CFZombieLevel ?
NSZombieEnabled
CFZombieLevel
在Xcode 4中。x的新闻
(或点击Menubar > Product > Scheme > Edit Scheme)
Menubar
Product
Scheme
Edit Scheme
选择“诊断”页签,然后单击“启用僵尸对象”:
这将释放的对象转换为NSZombie实例,在再次使用时打印控制台警告。这是一种调试帮助,它增加了内存使用(没有真正释放对象),但改进了错误报告。
一个典型的情况是当你过度释放一个对象,你不知道是哪个:
-[UITableView release]: message sent to deallocated instance
当你将应用存档并提交到App Store时,这个Xcode设置将被忽略。在发布应用程序之前不需要修改任何东西。
按下⌥⌘R与选择Product > Run同时保持按下Alt键相同 单击“启用僵尸对象”复选框等同于在参数页签的“环境变量”一节中手动添加“NSZombieEnabled = YES”
Jano的答案是找到它最简单的方法。另一种方法是如果你点击方案下拉栏->编辑方案->参数选项卡,然后在环境变量列中添加NSZombieEnabled,在值列中添加YES…
我觉得这个选择更方便:
Profile
Zombies
一旦僵尸被检测到,你就会得到一个整洁的“僵尸堆栈”,它会告诉你有问题的对象是什么时候被分配的,在哪里被保留或释放:
Event Type RefCt Responsible Caller Malloc 1 -[MyViewController loadData:] Retain 2 -[MyDataManager initWithBaseURL:] Release 1 -[MyDataManager initWithBaseURL:] Release 0 -[MyViewController loadData:] Zombie -1 -[MyService prepareURLReuqest]
与使用Xcode方案的诊断选项卡相比的优势:
如果您忘记取消诊断选项卡中的选项,将没有对象从内存中释放。
您将得到一个更详细的堆栈,其中显示了在哪些方法中分配/释放或保留了损坏的对象。
在Xcode 4.2中
在Xcode > 4.3:
单击方案下拉栏->编辑方案->参数选项卡,然后在环境变量列中添加NSZombieEnabled,在值列中添加YES。
祝你好运!
Cocoa提供了一个很酷的特性,它极大地增强了调试这种情况的能力。它是一个叫做NSZombieEnabled的环境变量,看这个视频解释了在objective-C中设置NSZombieEnabled
或从Product > Scheme菜单中选择Edit Scheme
从Diagnostics选项卡中选择Enable Zombie Objects
Diagnostics
Enable Zombie Objects
作为替代,如果你喜欢.xcconfig文件,你可以阅读这篇文章https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/
.xcconfig