我如何设置NSZombieEnabled和CFZombieLevel为我的可执行文件在Xcode 4?
当前回答
在Xcode 4中。x的新闻
⌥⌘R
(或点击菜单>产品>方案>编辑方案)
选择“诊断”页签,然后单击“启用僵尸对象”:
这将释放的对象转换为NSZombie实例,在再次使用时打印控制台警告。这是一种调试帮助,它增加了内存使用(没有真正释放对象),但改进了错误报告。
一个典型的情况是当你过度释放一个对象,你不知道是哪个:
与僵尸:-[UITableView release]:消息发送到释放实例 没有僵尸:
当你将应用存档并提交到App Store时,这个Xcode设置将被忽略。在发布应用程序之前不需要修改任何东西。
按下“⌘R”与按住Alt键同时选择“Product > Run”相同。 单击“启用僵尸对象”复选框与在“参数”页签的“环境变量”部分手动添加“NSZombieEnabled = YES”相同。
其他回答
在Xcode 4.2中
项目名称/编辑方案/诊断/ 启用僵尸对象复选框 你完成
在Xcode 7中
⌘<
或从产品>方案菜单中选择编辑方案
在“诊断”选项卡中选择“启用僵尸对象”
如果您更喜欢.xcconfig文件,可以阅读本文https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/
在Xcode 4中。x的新闻
⌥⌘R
(或点击菜单>产品>方案>编辑方案)
选择“诊断”页签,然后单击“启用僵尸对象”:
这将释放的对象转换为NSZombie实例,在再次使用时打印控制台警告。这是一种调试帮助,它增加了内存使用(没有真正释放对象),但改进了错误报告。
一个典型的情况是当你过度释放一个对象,你不知道是哪个:
与僵尸:-[UITableView release]:消息发送到释放实例 没有僵尸:
当你将应用存档并提交到App Store时,这个Xcode设置将被忽略。在发布应用程序之前不需要修改任何东西。
按下“⌘R”与按住Alt键同时选择“Product > Run”相同。 单击“启用僵尸对象”复选框与在“参数”页签的“环境变量”部分手动添加“NSZombieEnabled = YES”相同。
Cocoa提供了一个很酷的特性,它极大地增强了调试这种情况的能力。它是一个叫做NSZombieEnabled的环境变量,观看这个视频来解释如何在objective-C中设置NSZombieEnabled
我觉得这个选择更方便:
点击“运行按钮下拉菜单” 从列表中选择配置文件 程序“仪器”应该打开,你也可以选择僵尸 现在您可以与应用程序交互并尝试引起错误 一旦错误发生,你就会得到一个提示,提示你的对象何时被释放并因此被释放。
一旦僵尸被检测到,你就会得到一个整洁的“僵尸堆栈”,它会告诉你有问题的对象是什么时候被分配的,在哪里被保留或释放:
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方案的诊断选项卡相比,优势如下:
如果您忘记取消诊断选项卡中的选项,将没有对象从内存中释放。 您将得到一个更详细的堆栈,其中显示了在哪些方法中分配/释放或保留了损坏的对象。
推荐文章
- 如何更改导航栏上“后退”按钮的标题
- 有没有办法从UITableView中移除分隔线?
- 如何在Objective-C中声明类级属性?
- Xcode:构建失败,但没有错误消息
- 在Objective-C中@property保留,赋值,复制,非原子
- 我如何在NSAttributedString中创建一个可点击的链接?
- 你能在Linux下运行Xcode吗?
- 停止UIWebView垂直“弹跳”?
- 启动屏幕故事板不显示图像
- 对未渲染的视图进行快照,结果是一个空快照
- 开始使用instancetype而不是id是否有益?
- 我可以强制UITableView隐藏分隔符之间的空单元格吗?
- 为什么Objective-C文件使用。m扩展名?
- Objective-C for Windows
- 获得推送通知,而应用程序在前台iOS