交换UIImages导致'无法识别的选择器发送到实例'?

时间:2009-09-30 14:46:14

标签: iphone uiimage

错误: [__NSCFDate drawAtPoint:]:无法识别的选择器发送到实例0xd251e0 由于未捕获的异常'NSInvalidArgumentException'

而终止应用程序

方案: 在大多数情况下这是有效的。但是我注意到这个错误,即使是在模拟器上,当我慢慢地,但一直地交换UIImages时。

例如,我保留了对即时绘图的UIImage的引用。通过单击选择器控件,我正在更改面部图像(这发生在另一个视图控制器中)。

我可以通过不断更改面部来不断重新创建此错误。它通常会在大约第4次交换时崩溃。

我的理论: 它没有加载图像,因此图像参考是零。我知道我已经阅读了一些关于UIImage被缓存的内容,所以我不认为我的内存不足。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

更有可能的是,你的图像过早发布或过早发布 - 在你的应用程序完成之前发布 - 并且,巧合的是,NSDate的实例被分配在与现在相同的地址上 - 失效的形象。

听起来很巧合,但事实并非如此。一直发生。

在Instruments的ObjectAlloc仪器中启用僵尸检测并运行您的应用程序。它会告诉你UIImage的过早发布的实例,以及在点击过程中发生的所有保留和释放的位置。

http://developer.apple.com/mac/library/documentation/Performance/Conceptual/ManagingMemory/Articles/FindingLeaks.html#//apple_ref/doc/uid/20001883

搜索僵尸。

或者:

NSZombies are eating my app's brain!