如何在Xcode 4中为我的可执行文件设置NSZombieEnabled
和CFZombieLevel
?
#1楼
在Xcode 4.2中
- 项目名称/编辑方案/诊断/
- 启用Zombie Objects复选框
- 你完成了
#2楼
在Xcode> 4.3中:
单击scheme下拉栏 - > edit scheme - > arguments选项卡,然后在Environment Variables列中添加NSZombieEnabled,在value列中添加YES。
祝好运 !!!
#3楼
Cocoa提供了一个很酷的功能,可以极大地增强您调试此类情况的能力。 这是一个名为NSZombieEnabled的环境变量,观看此视频解释在objective-C中设置NSZombieEnabled
#4楼
在Xcode 7中
⌘ <
或从Product
> Scheme
菜单中选择Edit Scheme
从“ Diagnostics
选项卡中选择“ Enable Zombie Objects
”
或者,如果你更喜欢.xcconfig
文件,你可以阅读这篇文章https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/
#5楼
在Xcode 4.x中按
⌥⌘ř
(或单击Menubar
> Product
> Scheme
> Edit Scheme
)
选择“诊断”选项卡,然后单击“启用僵尸对象”:
这会将释放的对象转换为NSZombie实例,再次使用时会打印控制台警告。 这是一种调试辅助工具,可以增加内存使用(没有实际释放对象),但可以改善错误报告。
一个典型的情况是当你过度释放一个对象但你不知道哪一个:
- 随着僵尸:
-[UITableView release]: message sent to deallocated instance
- 没有僵尸:
存档App Store提交的应用程序时,将忽略此Xcode设置。 在发布应用程序之前,您无需触摸任何内容。
按压⌥⌘R是相同选择产品>同时保持按压Alt键运行。
单击“启用僵尸对象”复选框与在“参数”选项卡的“环境变量”部分中手动添加“NSZombieEnabled = YES”相同。
#6楼
Jano的答案是找到它的最简单的方法..另一种方法是,如果你单击方案下拉栏 - >编辑方案 - >参数选项卡,然后在环境变量列中添加NSZombieEnabled,在值列中添加YES ...
#7楼
我发现这个替代方案更方便:
- 单击“运行按钮下拉列表”
- 从列表中选择
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方案的诊断选项卡相比的优势 :
如果您忘记取消选中诊断选项卡中的选项,则不会从内存中释放任何对象。
您将获得更详细的堆栈,向您显示您的腐败对象分配/释放或保留的方法。