2011-06-10 56 views
2

我一直在研究这个问题,有些人说这个错误没有问题,只要应用程序不会崩溃。警告:接收到的内存警告级别为1并且崩溃

我的应用程序获取此错误,并在此之后,当我尝试点击单元格的行(调用didSelectRowAtIndexPath)时,它崩溃。它给我一个错误UIImage发送消息到释放的消息。我猜测这是因为内存警告它释放了一些UIView,因此它崩溃了。

这是为什么,我该如何解决这个问题?我一直在调试这个相当长一段时间,使用仪器,分析等,并没有运气。 我想发布一些代码,但不知道要发布哪一个。

+0

你使用[NSZombiesEnabled](http://howtomakeiphoneapps.com/home/2009/2/6/nszombie-and-xcode- oh-my.html)来跟踪错误发生的位置?如果是这样,请发送一些用于发送消息到该UIImage的didSelectRowAtIndexPath部分的代码。 – 2011-06-10 02:45:09

+0

我正在使用NSZombiesEnabled,当它崩溃时,它指向main.m,具体为int retVal = UIApplicationMain(argc,argv,@“CVore”,nil); – adit 2011-06-10 03:28:31

+0

您的一些代码可以帮助我们。尝试在您的didSelectRowAtIndex中张贴一些代码。 – iPrabu 2011-06-10 05:26:10

回答

0

你未能保留你所关心的东西。从你的消息中,我会怀疑这个物体是UIImage。首先运行静态分析器,看看你是否没有明显的东西。然后检查你的ivars,尤其是与图像相关的ivars。确保你使用访问器访问你的ivars,而不是直接访问(除init之外,访问者本身和dealloc)。确保你的对象属性是用“保留”来定义的。

您可以使用“僵尸”工具来帮助您追踪哪个物体被保留不足。

+0

我已启用NSZombie和我没有任何UIImage在我的应用程序..这就是为什么我拉我的头发出来......最接近我有一个UIImage是一个TTImageView – adit 2011-06-10 03:24:15

+0

好吧,TTImageView几乎肯定有一个UIImage它的内部,所以这是一个好看的地方。你可能欠保留它。你还应该确保你在'viewDidUnload'中将所有的IBOutlet设置为'nil'。 http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmNibObjects.html – 2011-06-10 03:27:31

+0

我应该将IBOutlet设置为无viewDidUnload或dealloc? – adit 2011-06-10 03:29:18

0

通过您的评论之一,很明显,问题是与内存管理和释放您的对象....我建议你深入到你的代码,并找出你要释放的代码片段你反对(或分配它们)......这也可能是由于事实上,分配后你根本没有释放你的对象,并且处理器由于缺乏内存而试图杀死你的应用程序......顺便说一下,这种错误吸你的时间很多...祝你好运...

+0

我同意你的最后一句话,这很糟糕。我花了最后3天试图找到这个错误...我认为测试需要比编写应用本身更长的时间 – adit 2011-06-10 06:47:42