如何在Xcode 4中为我的可执行文件设置 NSZombieEnabled 和 CFZombieLevel ?
NSZombieEnabled
CFZombieLevel
在Xcode 4.x中按
(或单击 Menubar > Product > Scheme > Edit Scheme )
Menubar
Product
Scheme
Edit Scheme
选择“诊断”选项卡,然后单击“启用僵尸对象”:
这会将释放的对象转换为NSZombie实例,再次使用时会打印控制台警告 . 这是一种调试辅助工具,可以增加内存使用(没有实际释放对象),但可以改善错误报告 .
一个典型的情况是当你过度释放一个对象但你不知道哪一个:
有僵尸: -[UITableView release]: message sent to deallocated instance
-[UITableView release]: message sent to deallocated instance
没有僵尸:
存档App Store提交的应用程序时,将忽略此Xcode设置 . 在发布应用程序之前,您无需触摸任何内容 .
按⌥⌘R与按住Alt键同时选择产品>运行相同 .单击"Enable Zombie Objects"复选框与在参数选项卡的"Environment Variables"部分中手动添加"NSZombieEnabled = YES"相同 .
Jano的答案是找到它的最简单的方法..另一种方法是,如果你单击方案下拉栏 - >编辑方案 - >参数选项卡,然后在环境变量列中添加NSZombieEnabled,在值列中添加YES ...
我发现这个替代方案更方便:
点击"Run Button Dropdown"
从列表中选择 Profile
Profile
程序"Instruments"应该打开,你也可以选择 Zombies
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]
Advantages compared to using the diagnostic tab of the Xcode Schemes :
如果忘记取消选中诊断选项卡中的选项,则不会从内存中释放任何对象 .
您将获得更详细的堆栈,向您显示您的腐败对象分配/释放或保留的方法 .
在Xcode 4.2中
项目名称/编辑方案/诊断/
启用Zombie Objects复选框
你已经完成了
或从 Product > Scheme 菜单中选择 Edit Scheme
从 Diagnostics 选项卡中选择 Enable Zombie Objects
Diagnostics
Enable Zombie Objects
或者,如果你更喜欢 .xcconfig 文件,你可以阅读这篇文章https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/
.xcconfig
Cocoa提供了一个很酷的功能,可以极大地增强您调试此类情况的能力 . 这是一个名为NSZombieEnabled的环境变量,请注意这个解释在Objective-C中设置NSZombieEnabled的video
在Xcode> 4.3中:
单击scheme下拉栏 - > edit scheme - > arguments选项卡,然后在Environment Variables列中添加NSZombieEnabled,在value列中添加YES .
祝好运 !!!
7 回答
在Xcode 4.x中按
⌥⌘R
(或单击
Menubar
>Product
>Scheme
>Edit Scheme
)选择“诊断”选项卡,然后单击“启用僵尸对象”:
这会将释放的对象转换为NSZombie实例,再次使用时会打印控制台警告 . 这是一种调试辅助工具,可以增加内存使用(没有实际释放对象),但可以改善错误报告 .
一个典型的情况是当你过度释放一个对象但你不知道哪一个:
有僵尸:
-[UITableView release]: message sent to deallocated instance
没有僵尸:
存档App Store提交的应用程序时,将忽略此Xcode设置 . 在发布应用程序之前,您无需触摸任何内容 .
按⌥⌘R与按住Alt键同时选择产品>运行相同 .
单击"Enable Zombie Objects"复选框与在参数选项卡的"Environment Variables"部分中手动添加"NSZombieEnabled = YES"相同 .
Jano的答案是找到它的最简单的方法..另一种方法是,如果你单击方案下拉栏 - >编辑方案 - >参数选项卡,然后在环境变量列中添加NSZombieEnabled,在值列中添加YES ...
我发现这个替代方案更方便:
点击"Run Button Dropdown"
从列表中选择
Profile
程序"Instruments"应该打开,你也可以选择
Zombies
现在您可以与您的应用互动并尝试导致错误
一旦发生错误,您应该获得关于何时释放对象并因此解除分配的提示 .
一旦检测到僵尸,你就会得到一个整洁的“僵尸堆栈”,它会告诉你何时分配了有问题的对象以及它被保留或释放的位置:
Advantages compared to using the diagnostic tab of the Xcode Schemes :
如果忘记取消选中诊断选项卡中的选项,则不会从内存中释放任何对象 .
您将获得更详细的堆栈,向您显示您的腐败对象分配/释放或保留的方法 .
在Xcode 4.2中
项目名称/编辑方案/诊断/
启用Zombie Objects复选框
你已经完成了
On在Xcode 7中
⌘<
或从
Product
>Scheme
菜单中选择Edit Scheme
从
Diagnostics
选项卡中选择Enable Zombie Objects
或者,如果你更喜欢
.xcconfig
文件,你可以阅读这篇文章https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/Cocoa提供了一个很酷的功能,可以极大地增强您调试此类情况的能力 . 这是一个名为NSZombieEnabled的环境变量,请注意这个解释在Objective-C中设置NSZombieEnabled的video
在Xcode> 4.3中:
单击scheme下拉栏 - > edit scheme - > arguments选项卡,然后在Environment Variables列中添加NSZombieEnabled,在value列中添加YES .
祝好运 !!!