如何在Xcode 4中为我的可执行文件设置NSZombieEnabled
和CFZombieLevel
?
答案 0 :(得分:754)
在Xcode 4.x中按
(或点击Menubar
> Product
> Scheme
> Edit Scheme
)
选择“诊断”标签,然后点击“启用僵尸对象”:
这会将已释放的对象转换为NSZombie实例,再次使用时会打印控制台警告。这是一种调试辅助工具,可以增加内存使用(没有实际释放对象),但可以改善错误报告。
典型的情况是当你过度释放一个物体但你不知道哪一个:
-[UITableView release]: message sent to deallocated instance
归档App Store提交的应用程序时,将忽略此Xcode设置。在发布应用程序之前,您无需触摸任何内容。
按⌥ ⌘ R 与选择产品>相同在按住 Alt 键的同时运行 单击“启用僵尸对象”复选框与在“参数”选项卡的“环境变量”部分中手动添加“NSZombieEnabled = YES”相同。
答案 1 :(得分:70)
Jano的答案是找到它的最简单方法..另一种方法是,如果你点击方案下拉栏 - >编辑方案 - >参数选项卡,然后在Environment Variables列中添加NSZombieEnabled,在值列中添加YES ...
答案 2 :(得分:57)
我觉得这个替代方案更方便:
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方案的诊断选项卡相比的优势:
如果您忘记取消选中诊断标签中的选项,则不会从内存中释放任何对象。
您将获得更详细的堆栈,向您展示您的腐败对象分配/释放或保留的方法。
答案 3 :(得分:5)
在Xcode 4.2中
答案 4 :(得分:4)
或从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/
答案 5 :(得分:1)
Cocoa提供了一个很酷的功能,可以极大地增强您调试此类情况的能力。这是一个名为NSZombieEnabled的环境变量,请注意这个解释在Objective-C中设置NSZombieEnabled的video
答案 6 :(得分:-1)
在Xcode中> 4.3:
您点击计划下拉栏 - >编辑方案 - >参数选项卡,然后在Environment Variables列中添加NSZombieEnabled,在值列中添加YES。
祝你好运!!!