如何设置NSZombieEnabled
和CFZombieLevel
我的可执行文件在Xcode 4?
如何设置NSZombieEnabled
和CFZombieLevel
我的可执行文件在Xcode 4?
Answers:
在Xcode 4.x中按
(或点击Menubar
> Product
> Scheme
> Edit Scheme
)
选择“诊断”选项卡,然后单击“启用僵尸对象”:
这会将释放的对象转换为NSZombie实例,这些实例在再次使用时会打印控制台警告。这是一个调试辅助工具,可以增加内存使用量(实际上没有释放任何对象),但可以改善错误报告。
一个典型的情况是当您过度释放一个对象而又不知道哪个对象:
-[UITableView release]: message sent to deallocated instance
当您存档应用程序以提交App Store时,将忽略此Xcode设置。在发布应用程序之前,您无需触摸任何东西。
按住键⌥⌘R的同时按下与选择产品>运行相同Alt。
单击“启用僵尸对象”复选框与在“参数”选项卡的“环境变量”部分中手动添加“ NSZombieEnabled = YES”相同。
CMD-<
(CMD-SHIFT-comma
)或Product -> Scheme -> Edit SCheme...
我发现此替代方法更方便:
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 Schemes的诊断选项卡相比的优势:
如果您忘记取消选中诊断选项卡中的选项,则不会从内存中释放任何对象。
您将获得更详细的堆栈,该堆栈向您显示分配/释放或保留损坏的对象的方法。
iOS Simulator > All
从主模板列表中进行选择(您只能在模拟器中执行此操作)
或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/
在Xcode> 4.3中:
您单击方案下拉栏->编辑方案->参数选项卡,然后在Environment Variables列中添加NSZombieEnabled,在value列中添加YES。
祝好运 !!!