如何在Xcode 4中设置NSZombieEnabled?

Che*_*tan 456 xcode objective-c nszombie xcode4

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

Jan*_*ano 753

在Xcode 4.x中按

R

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

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

单击

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

一个典型的情况是当你过度释放一个对象但你不知道哪一个:

  • 随着僵尸: -[UITableView release]: message sent to deallocated instance
  • 没有僵尸: EXC_BAD_ACCESS

存档App Store提交的应用程序时,将忽略此Xcode设置.在发布应用程序之前,您无需触摸任何内容.

按下R与按住键时选择产品>运行相同Alt.
单击"启用僵尸对象"复选框与在"参数"选项卡的"环境变量"部分中手动添加"NSZombieEnabled = YES"相同.

  • 谢谢 - 我想知道他们隐藏了这些选项的位置.我现在意识到这与"编辑方案"菜单中的窗口相同. (27认同)
  • 在XCode 5(以及更高版本的4 - 4.3.x肯定,也许更早),这是`CMD- <`(`CMD-SHIFT-逗号`),或`产品 - >方案 - >编辑SCheme .. .` (2认同)

lea*_*010 70

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


Bes*_*esi 57

我发现这个替代方案更方便:

  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]
Run Code Online (Sandbox Code Playgroud)

与使用Xcode方案的诊断选项卡相比的优势:

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

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

  • 确保从主模板列表中选择"iOS模拟器>全部"(您只能在模拟器中执行此操作) (4认同)

pra*_*aik 5

在Xcode 4.2中

  • 项目名称/编辑方案/诊断/
  • 启用Zombie Objects复选框
  • 你完成了


Ign*_*ioC 5

在Xcode 7中

?<

Edit SchemeProduct> Scheme菜单中选择

选择Enable Zombie Objects表格Diagnostics标签

xcode 7僵尸标志

或者,如果您喜欢.xcconfig文件,则可以阅读本文https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/