459

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

4

7 回答 7

753

在 Xcode 4.x 中按

⌥</kbd>⌘</kbd>R

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

选择“诊断”选项卡并单击“启用僵尸对象”:

点击

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

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

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

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

紧迫⌥</kbd>⌘</kbd>R is the same as selecting Product > Run while keeping the Alt key pressed.
Clicking the "Enable Zombie Objects" checkbox is the same as manually adding "NSZombieEnabled = YES" in the section "Environment Variables" of the tab Arguments.

于 2011-02-07T01:55:47.390 回答
70

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

于 2011-03-16T14:22:13.827 回答
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]

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

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

  2. 你会得到一个更详细的堆栈,显示你的损坏对象是通过什么方法被分配/释放或保留的。

于 2012-01-14T15:10:20.740 回答
5

在 Xcode 4.2 中

  • 项目名称/编辑方案/诊断/
  • 启用僵尸对象复选框
  • 你完成了
于 2012-04-11T07:18:52.527 回答
5

在 Xcode 7 中

⌘</kbd><

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/

于 2015-08-20T06:50:01.957 回答
1

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

于 2013-10-22T04:41:08.740 回答
-1

在 Xcode > 4.3 中:

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

祝你好运 !!!

于 2013-07-05T06:38:08.893 回答