Iphone 轨道“;已发送到解除分配实例的消息“;通过仪器

Iphone 轨道“;已发送到解除分配实例的消息“;通过仪器,iphone,xcode,exc-bad-access,instruments,Iphone,Xcode,Exc Bad Access,Instruments,在XCode 4.2中,我需要一些仪器方面的帮助来追踪EXC_BAD_访问错误的原因。启用NSZombie标志后,当应用程序在设备上崩溃时,我在控制台上看到以下内容 *** -[__NSArrayM removeObject:]: message sent to deallocated instance 0x8674e30 我用过仪器,但看不到僵尸的档案。我使用了配置文件,但很快就迷路了。我为应用程序启用了ARC(希望摆脱alloc/retain/release),但仍然存在同样的问题 我如何

在XCode 4.2中,我需要一些仪器方面的帮助来追踪EXC_BAD_访问错误的原因。启用NSZombie标志后,当应用程序在设备上崩溃时,我在控制台上看到以下内容

*** -[__NSArrayM removeObject:]: message sent to deallocated instance 0x8674e30
我用过仪器,但看不到僵尸的档案。我使用了配置文件,但很快就迷路了。我为应用程序启用了ARC(希望摆脱alloc/retain/release),但仍然存在同样的问题

我如何使用仪器来追踪这一点

看看我在模拟器上使用僵尸profilier的经验。基本上,您应该能够通过以下方式使用profilier:

  • 将运行模式更改为配置文件
  • 从列表中选择僵尸
  • 当它缓存僵尸时,双击右侧的堆栈跟踪以查看对象生命周期的不同部分
  • 使用以下命令:

    Shell malloc_history process_id memory
    
    例如,Shell malloc_历史进程id 0x11afab80

    为相同的1)MallocstackLogging 2)NsDebugEnabled 3)NSZombieEnabled启用以下功能


    这将解决问题

    配置文件或使用仪器运行(command+I),然后使用泄漏工具。

    在内部单击泄漏部分并选中收集泄漏内存内容复选框。


    祝您好运。

    您的视图层次结构中是否有任何*UIScrollView*s,您是否向它们发送类似scrollToVisibleRect:animated:的消息

    如果是,请尝试为动画参数传递“否”。iOS5似乎在滚动视图和嵌入动画方面存在一些问题。你所看到的同样的崩溃已经让我疯狂了好几天(没有可用的调用堆栈),最后我把它缩小到滚动视图调用。
    希望有帮助。

    我也有同样的问题。首先,我使用了Raffaello Colasante的解决方案,并将
    NO
    传递给
    scrollRectToVisible:animated:
    。但是我注意到这个方法是在另一个线程上处理的。 您应该检查是否在主线程上调用
    [uitableview scrollRectToVisible:CGRectMake(0,0,1,1)animated:YES]
    (所有ui操作都应该在主线程上执行)。我更改代码以便在主线程上调用它

    发件人:

    致:

    注意:(setOptionalActions:)调用->(scrollRectToVisible:动画:)

    现在问题解决了

    请注意,您可以使用以下内容,而不是使用:


    @约翰·桑德斯:编辑了我的问题……这是针对iPhone的,使用的是XCode 4.2坦克,罗伯特:我会查看并报告。:)我的Instruments-4.2(4233)版本没有您在链接中提到的僵尸配置文件。是藏在什么地方,还是我没有最新版本的仪器。我使用的是XCode 4.2。不要自己打开仪器,先把它关上。然后在配置文件模式下启动XCode并使其启动instruments。您应该在第一次加载时看到该选项。否则,您使用的是什么编译器和调试器(llvm/gdb)?此外,只有在模拟器上而不是在设备上运行时,您才能看到zombie选项。谢谢,Rahul…..1。找不到如何启用NSDebugEnabled。2.上面的十六进制数是多少?它是释放实例的地址吗?那么为什么它前面有进程id?3.我在XCode的控制台中尝试了该命令,但出现了错误-“shell”不是有效的命令十六进制数是内存地址。在您的情况下,它是“0x8674e30”。请仔细阅读我刚刚读过的教程-它指的是Xcode 2.x中的功能-其中一些功能在Xcode 4.2中不存在(如NSDebugEnabled)。我有点困惑,你必须进入你的可执行文件的“获取信息”上下文菜单(在XCode左面板的“可执行文件”组中)。然后进入参数选项卡。您可以将上面指定的环境变量添加到底部的框中(“要在环境中设置的变量”).谢谢-我会探索的。谢谢Raffaello…不,我没有UIScrollView,但是有UITableView。我想我正在使用ScrollToRowatineXpath:atScrollPosition:animated:method。我已经做了更改,在我的简短测试中,崩溃没有发生。我将在设备上进行广泛测试,并再次发布状态。谢谢,这是可能是救命恩人。在做了这些改变之后,我还没有看到崩溃。再次感谢你,拉斐洛。(我通常讨厌这种评论,但是)谢谢!谢谢!谢谢!我花了一个小时试图弄清楚为什么我会得到一个随机的NSArray溢出,并且在代码中的任何地方都找不到它。关闭我行的动画选择调用修复了崩溃!另一个恼人的iOS5错误…你不需要将动画设置为否。如果你在V中将UITableView的委托设置为零iewWillUnload,这将解决问题。问题是核心动画保留动画的滚动视图,然后尝试发送代理消息。你好,Ariel,感谢关于仪器的指针-它一直困扰着我。我想我应该系紧腰带,开始使用/理解它。问题最终解决了非常琐碎…我结束了4个工作日中的2个工作日!热爱这个社区。感谢所有回复我的人。。。。
    //method called not from main thread
    ...
    [someObjectInstance setOptionalActions:optActions];
    
    //method called not from main thread
    ...
    dispatch_async(dispatch_get_main_queue(), ^{
        //now method called from main thread
        [someObjectInstance setOptionalActions:optActions];
    });
    
    @implementation SomeObjectClass  
    ...
    - (void) setOptionalActions:(NSArray *) actionsArray {
        ... // handling of array
        [myTableView scrollRectToVisible:CGRectMake(0,0,1,1) animated:YES];
    }
    ...
    @end
    
    //method called not from main thread, but will be performed on main thread
    [someObjectInstance performSelectorOnMainThread:@selector(setOptionalActions:) withObject:optionalActions waitUntilDone:NO];