如何在Xcode 4中设置NSZombieEnabled?

时间:2010-02-03 07:01:02

标签: objective-c xcode xcode4 nszombie

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

7 个答案:

答案 0 :(得分:754)

在Xcode 4.x中按

- [R

(或点击Menubar> Product> Scheme> Edit Scheme

选择“诊断”标签,然后点击“启用僵尸对象”:

Click "Enable Zombie Objects"

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

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

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

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

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

答案 1 :(得分:70)

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

答案 2 :(得分:57)

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

  1. 点击“运行按钮下拉列表”
  2. 从列表中选择Profile
  3. 应打开“乐器”程序,您也可以选择Zombies
  4. 现在您可以与您的应用互动并尝试导致错误
  5. 一旦发生错误,您应该获得关于何时释放对象并因此解除分配的提示。
  6. 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方案的诊断选项卡相比的优势

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

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

答案 3 :(得分:5)

在Xcode 4.2中

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

答案 4 :(得分:4)

On On Xcode 7

<

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

Enable Zombie Objects标签

中选择Diagnostics

xcode 7 zombie flag

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

答案 5 :(得分:1)

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

答案 6 :(得分:-1)

在Xcode中> 4.3:

您点击计划下拉栏 - >编辑方案 - >参数选项卡,然后在Environment Variables列中添加NSZombieEnabled,在值列中添加YES。

祝你好运!!!