*** - [UIImage retain]:发送给解除分配的实例的消息

时间:2011-06-06 02:20:48

标签: iphone objective-c memory-management

我的应用中出现了一个非常奇怪的内存管理问题。我有一个UISplitViewController appps,其中RootViewController是一个UITabBarApplication。错误:

*** -[UIImage retain]: message sent to deallocated instance 0x555960
当我尝试通过点击标签栏按钮来切换视图时,总会发生

。按钮上有三个标签栏按钮。我也没有任何调用UIImage保留在我的代码中的任何地方。

有没有人对如何调试这个有任何提示?我不知道如何具体地重现这一点,我所知道的是,当我在标签之间切换时,有时会发生这种情况。

调试器在:

中断
int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, @"CVore", nil);
    [pool release];
    return retVal;
}

enter image description here

更新 我收到了内存警告。等级= 1然后当我切换标签时,它会给我错误。

3 个答案:

答案 0 :(得分:0)

您是否尝试在代码中使用Analyzer?不保证,但可能有所帮助。

答案 1 :(得分:0)

Received memory warning. Level=1

通常意味着您的代码泄漏了内存。从你提供的代码中,我们无法分辨出什么是错的。要么为我们提供更多代码,要么观看 WWDC 2010 Session 311 - 使用乐器进行高级内存分析,这将帮助您自己发现错误。

答案 2 :(得分:0)

听起来你正在发布一个你没有保留过的自动释放的对象。之后,当自动释放池被耗尽/释放时,会向该(现在无效)对象发送一条释放消息,从而导致异常。

良好的开端是turn on NSZombieEnabled,以便您更好地了解涉及的对象。然后先看看该对象是如何创建的。由于您的异常似乎发生在您收到内存警告时,请查看在这种情况下会发生什么。您可能有一个错误地释放该对象的-viewDidUnload方法。