ChatGPT解决这个技术问题 Extra ChatGPT

如何在 Xcode 4 中设置 NSZombieEnabled?

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

你在问Xcode 4吗?
为什么默认情况下不启用这样的选项超出了我的范围......
因为它基本上阻止了任何真正的内存释放,默认情况下启用这似乎不是一个好主意。
@Daniel Magnusson:这是适者生存的事情。通过使用 XCode 进行不友好但可行的开发,您将获得更好的开发人员。只是在开玩笑。
@DanielMagnusson我认为这不是一个坏主意,AFAIK“僵尸”模式会将每个对象更改为特殊类型的 ob 对象,以便它可以在收到消息时进行检测。因此启用“僵尸模式”将导致永远不会释放任何对象,因此您应该只在处理此类错误时使用它。

G
GabrieleMartini

在 Xcode 4.x 中按

⌥⌘R

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

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

https://i.stack.imgur.com/pe4cB.png

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

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

使用僵尸:-[UITableView release]:发送到已释放实例的消息

没有僵尸:

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

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


谢谢 - 我想知道他们将这些选项隐藏在哪里。我现在意识到这与“编辑方案”菜单中的窗口相同。
除此之外,如果选中了“使用运行操作的选项”框,则在“运行”屏幕中执行此操作也会将其设置为“测试”。如果您只想为测试执行此操作,则需要取消选中该框
另请注意,此选项出现在 Xcode 4.1 上(对吗?)
在 XCode 5(以及 4 的更高版本——肯定是 4.3.x,也许更早)中,这是 CMD-< (CMD-SHIFT-comma) 或 Product -> Scheme -> Edit SCheme...
我陷入了奇怪的 EXC_BAD_ACCESS 问题,甚至跳过了僵尸,如果您能指导我完成这个stackoverflow.com/questions/29210057/…,那就太好了
l
learner2010

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


0
0942v8653

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

单击“Run Button Dropdown” 从列表中选择 Profile 程序“Instruments”应该打开,您也可以在其中选择 Zombies 现在您可以与您的应用程序交互并尝试导致错误一旦发生错误,您应该得到提示当您的对象被释放并因此被释放时。

https://i.stack.imgur.com/u982K.png

一旦检测到僵尸,您就会得到一个简洁的“僵尸堆栈”,它会向您显示相关对象的分配时间以及保留或释放的位置:

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 方案的诊断选项卡相比的优势:

如果您忘记取消选中诊断选项卡中的选项,则不会从内存中释放任何对象。你会得到一个更详细的堆栈,显示你的损坏对象是通过什么方法被分配/释放或保留的。


我的 XCode 4 中缺少“僵尸”选项,为什么?
确保您从主模板列表中选择 iOS Simulator > All(您只能在模拟器中执行此操作)
出于某种原因..如果我选择“僵尸”,它只会显示分配..知道为什么吗?
这是最好的解决方案。帮了我很多:)
A
Aaron Brager

在 Xcode 4.2 中

项目名称/编辑方案/诊断/

启用僵尸对象复选框

你完成了


I
IgnazioC

在 Xcode 7 中

⌘<

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

Diagnostics 选项卡中选择 Enable Zombie Objects

https://i.stack.imgur.com/CHX22.png

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


u
user2554822

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


B
Besi

在 Xcode > 4.3 中:

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

祝你好运 !!!