如何在Xcode 4中设置NSZombieEnabled?

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

在Xcode 4.x按

⌥⌘R

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

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

点击“启用僵尸对象”

这将释放的对象转换为NSZombie实例,在再次使用时会打印控制台警告。 这是一个增加内存使用的debugging辅助工具(没有任何对象真的被释放),但是改善了错误报告。

一个典型的例子是当你过度释放一个对象,而你不知道是哪一个:

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

当您将应用程序存档提交时,此Xcode设置将被忽略。 发布你的应用程序之前,你不需要碰任何东西。

按下⌥⌘R与保持按住Alt键的同时select产品>运行相同。
点击“启用僵尸对象”checkbox与在选项卡参数的“环境variables”部分中手动添加“NSZombieEnabled = YES”相同。

Jano的答案是find它的最简单的方法..另一种方法是,如果你点击scheme下拉栏 – >编辑scheme – >参数选项卡,然后添加NSZombieEnabled在环境variables列和是在值列…

我觉得这个select更方便:

  1. 点击“运行button下拉菜单”
  2. 从列表中selectProfile
  3. “仪器”程序应该打开,你也可以selectZombies
  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] 

与使用Xcodescheme的诊断选项卡相比的优势

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

  2. 你会得到一个更详细的堆栈,它显示了你的腐败对象被分配/释放或保留的方法。

在Xcode 4.2中

  • 项目名称/编辑scheme/诊断/
  • 启用僵尸对象checkbox
  • 你完成了

在Xcode 7上

<

或从Product > Scheme菜单中selectEdit Scheme

从“ Diagnostics选项卡中select“ Enable Zombie Objects

xcode 7僵尸标志

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

cocoa提供了一个很酷的function,大大增强了你debugging这种情况的能力。 它是一个名为NSZombieEnabled的环境variables,看这个video解释在Objective-C中设置NSZombieEnabled

在Xcode> 4.3中:

你点击scheme下拉栏 – >编辑scheme – >参数选项卡,然后在环境variables列中添加NSZombieEnabled,在值列中添加YES。

祝你好运 !!!