提问



如何在Xcode 4中为我的可执行文件设置NSZombieEnabledCFZombieLevel?

最佳参考


在Xcode 4.x中按


- [[R



(或单击Menubar> Product> Scheme> Edit Scheme)


选择诊断选项卡,然后单击启用僵尸对象:






这会将释放的对象转换为NSZombie实例,再次使用时会打印控制台警告。这是一个调试辅助工具,可以增加内存使用(没有对象真正发布),但可以改善错误报告。


一个典型的情况是当你过度释放一个物体并且你不知道哪一个:



  • 使用僵尸:-[UITableView release]: message sent to deallocated instance

  • 没有僵尸:






存档App Store提交的应用程序时,将忽略此Xcode设置。在发布申请之前,您不需要触摸任何东西。


按⌥⌘R与按住Alt键同时选择产品>运行相同。

单击启用僵尸对象复选框与在参数选项卡的环境变量部分中手动添加NSZombieEnabled=YES相同。

其它参考1


Jano的答案是找到它的最简单的方法..另一种方法是,如果你点击方案下拉栏 - >编辑方案 - >参数选项卡,然后在环境变量列中添加NSZombieEnabled,在值列中添加YES。 ..

其它参考2


我觉得这个替代方案更方便:



  1. 点击运行按钮下拉列表

  2. 从列表中选择Profile

  3. 程序乐器应该打开,您也可以选择Zombies

  4. 现在您可以与您的应用互动并尝试导致错误

  5. 一旦发生错误,您应该获得关于何时释放对象并因此解除分配的提示。






一旦检测到一个僵尸,你就会得到一个整洁的僵尸堆栈,它会告诉你何时分配了有问题的对象以及它被保留或释放的位置:


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方案的诊断选项卡相比的优势:



  1. 如果您忘记取消选中诊断选项卡中的选项,则不会从内存中释放任何对象。

  2. 您将获得更详细的堆栈,其中显示了您的腐败对象分配/释放或保留的方法。


其它参考3


在Xcode 4.2中



  • 项目名称/编辑方案/诊断/

  • 启用Zombie Objects复选框

  • 你已经完成了


其它参考4


在Xcode 7中



<



或从Product> Scheme菜单中选择Edit Scheme


Diagnostics选项卡中选择Enable Zombie Objects


[17]


或者,如果你更喜欢.xcconfig文件,你可以阅读这篇文章https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/[18]

其它参考5


Cocoa提供了一个很酷的功能,可以极大地增强您调试此类情况的能力。这是一个名为NSZombieEnabled的环境变量,请观看此视频,解释在Objective-C中设置NSZombieEnabled [19]

其它参考6


在Xcode> 4.3中:


单击scheme下拉栏 - > edit scheme - > arguments选项卡,然后在Environment Variables列中添加NSZombieEnabled,在value列中添加YES。


祝你好运 !!!