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

有帮助吗?

解决方案

在 Xcode 4.x 中按

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

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

Click "Enable Zombie Objects"

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

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

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

当您存档应用程序以供 App Store 提交时,此 Xcode 设置将被忽略。在发布应用程序之前,您无需进行任何操作。

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

其他提示

在环境变量列>参数选项卡,然后添加NSZombieEnabled和YES在值列 - >编辑方案 -

Jano的的答案是找到它的最简单的方法..如果您单击方案下拉栏上的另一种方法是...

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

  1. 单击“运行按钮下拉菜单”
  2. 从列表中选择 Profile
  3. “仪器”程序应该打开,您也可以在其中选择 Zombies
  4. 现在您可以与您的应用程序交互并尝试引发错误
  5. 一旦错误发生,您应该会得到有关对象何时被释放并因此被释放的提示。

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. 您将获得更详细的堆栈,其中显示损坏的对象是通过哪些方法分配/释放或保留的。

在 Xcode 4.2 中

  • 项目名称/编辑方案/诊断/
  • 启用僵尸对象复选框
  • 你完成了

在 Xcode 7 中打开

<

或选择 Edit SchemeProduct > 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/

可可提供了一个实用的功能,大大提高了自己的能力,调试这样的情况。这是被称为NSZombieEnabled的环境变量,看这也解释了设立NSZombieEnabled这影片目标C

在的Xcode> 4.3:

您单击方案下拉栏 - >编辑方案 - >参数选项卡,然后在环境变量列添加NSZombieEnabled和YES在值列

好运!!!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top