首页 文章

如何在Xcode 4中设置NSZombieEnabled?

提问于
浏览
455

如何在Xcode 4中为我的可执行文件设置 NSZombieEnabledCFZombieLevel

7 回答

  • 753

    在Xcode 4.x中按

    ⌥⌘R

    (或单击 Menubar > Product > Scheme > Edit Scheme

    选择“诊断”选项卡,然后单击“启用僵尸对象”:

    Click "Enable Zombie Objects"

    这会将释放的对象转换为NSZombie实例,再次使用时会打印控制台警告 . 这是一种调试辅助工具,可以增加内存使用(没有实际释放对象),但可以改善错误报告 .

    一个典型的情况是当你过度释放一个对象但你不知道哪一个:

    • 有僵尸: -[UITableView release]: message sent to deallocated instance

    • 没有僵尸:
      EXC_BAD_ACCESS


    存档App Store提交的应用程序时,将忽略此Xcode设置 . 在发布应用程序之前,您无需触摸任何内容 .

    按⌥⌘R与按住Alt键同时选择产品>运行相同 .
    单击"Enable Zombie Objects"复选框与在参数选项卡的"Environment Variables"部分中手动添加"NSZombieEnabled = YES"相同 .

  • 5

    Jano的答案是找到它的最简单的方法..另一种方法是,如果你单击方案下拉栏 - >编辑方案 - >参数选项卡,然后在环境变量列中添加NSZombieEnabled,在值列中添加YES ...

  • 3

    我发现这个替代方案更方便:

    • 点击"Run Button Dropdown"

    • 从列表中选择 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

    • 如果忘记取消选中诊断选项卡中的选项,则不会从内存中释放任何对象 .

    • 您将获得更详细的堆栈,向您显示您的腐败对象分配/释放或保留的方法 .

  • 1

    在Xcode 4.2中

    • 项目名称/编辑方案/诊断/

    • 启用Zombie Objects复选框

    • 你已经完成了

  • 57

    On在Xcode 7中

    ⌘<

    或从 Product > Scheme 菜单中选择 Edit Scheme

    Diagnostics 选项卡中选择 Enable Zombie Objects

    xcode 7 zombie flag

    或者,如果你更喜欢 .xcconfig 文件,你可以阅读这篇文章https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/

  • 70

    Cocoa提供了一个很酷的功能,可以极大地增强您调试此类情况的能力 . 这是一个名为NSZombieEnabled的环境变量,请注意这个解释在Objective-C中设置NSZombieEnabled的video

  • -1

    在Xcode> 4.3中:

    单击scheme下拉栏 - > edit scheme - > arguments选项卡,然后在Environment Variables列中添加NSZombieEnabled,在value列中添加YES .

    祝好运 !!!

相关问题