如何在Xcode 4中设置NSZombieEnabled?
如何在Xcode 4中为我的可执行文件设置NSZombieEnabled
和CFZombieLevel
?
在Xcode 4.x按
⌥⌘R
(或点击Menubar
> Product
> Scheme
> Edit Scheme
)
select“诊断”选项卡,然后单击“启用僵尸对象”:
这将释放的对象转换为NSZombie实例,在再次使用时会打印控制台警告。 这是一个增加内存使用的debugging辅助工具(没有任何对象真的被释放),但是改善了错误报告。
一个典型的例子是当你过度释放一个对象,而你不知道是哪一个:
- 与僵尸:
-[UITableView release]: message sent to deallocated instance
- 没有僵尸:
当您将应用程序存档提交时,此Xcode设置将被忽略。 发布你的应用程序之前,你不需要碰任何东西。
按下⌥⌘R与保持按住Alt键的同时select产品>运行相同。
点击“启用僵尸对象”checkbox与在选项卡参数的“环境variables”部分中手动添加“NSZombieEnabled = YES”相同。
Jano的答案是find它的最简单的方法..另一种方法是,如果你点击scheme下拉栏 – >编辑scheme – >参数选项卡,然后添加NSZombieEnabled在环境variables列和是在值列…
我觉得这个select更方便:
- 点击“运行button下拉菜单”
- 从列表中select
Profile
- “仪器”程序应该打开,你也可以select
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]
与使用Xcodescheme的诊断选项卡相比的优势 :
-
如果忘记取消选中诊断选项卡中的选项,将不会从内存中释放对象。
-
你会得到一个更详细的堆栈,它显示了你的腐败对象被分配/释放或保留的方法。
在Xcode 4.2中
- 项目名称/编辑scheme/诊断/
- 启用僵尸对象checkbox
- 你完成了
在Xcode 7上
⌘ <
或从Product
> Scheme
菜单中selectEdit Scheme
从“ Diagnostics
选项卡中select“ Enable Zombie Objects
”
另外,如果你喜欢.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。
祝你好运 !!!