如何在 Xcode 4 中设置 NSZombieEnabled?
-
25-09-2019 - |
题
我该如何设置 NSZombieEnabled
和 CFZombieLevel
对于 Xcode 4 中的可执行文件?
解决方案
在 Xcode 4.x 中按
⌥⌘右
(或单击 Menubar
> Product
> Scheme
> Edit Scheme
)
选择“诊断”选项卡并单击“启用僵尸对象”:
这会将释放的对象转换为 NSZombie 实例,并在再次使用时打印控制台警告。这是一种调试辅助工具,可以增加内存使用(没有真正释放任何对象),但可以改进错误报告。
一种典型的情况是当你过度释放一个对象并且你不知道是哪一个时:
- 与僵尸:
-[UITableView release]: message sent to deallocated instance
- 没有僵尸:
当您存档应用程序以供 App Store 提交时,此 Xcode 设置将被忽略。在发布应用程序之前,您无需进行任何操作。
紧迫 ⌥⌘右 与选择“产品”>“运行”相同,同时保留 替代 按下键。
单击“启用僵尸对象”复选框与在“参数”选项卡的“环境变量”部分中手动添加“NSZombieEnabled = YES”相同。
其他提示
Jano的的答案是找到它的最简单的方法..如果您单击方案下拉栏上的另一种方法是...
我发现这个替代方案更方便:
- 单击“运行按钮下拉菜单”
- 从列表中选择
Profile
- “仪器”程序应该打开,您也可以在其中选择
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 方案的诊断选项卡相比的优点:
如果您忘记取消选中诊断选项卡中的选项,则不会从内存中释放任何对象。
您将获得更详细的堆栈,其中显示损坏的对象是通过哪些方法分配/释放或保留的。
在 Xcode 4.2 中
- 项目名称/编辑方案/诊断/
- 启用僵尸对象复选框
- 你完成了
在 Xcode 7 中打开
⌘<
或选择 Edit Scheme
从 Product
> Scheme
菜单
选择 Enable Zombie Objects
形成 Diagnostics
标签
作为替代方案,如果您愿意 .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在值列
好运!!!