2009-09-30 65 views
1

错误: [__NSCFDate drawAtPoint:]:无法识别的选择发送到实例0xd251e0 Termininating应用程序由于未捕获的异常 'NSInvalidArgumentException'交换UIImages导致'无法识别的选择器发送到实例'?

方案: 对于这部作品的大部分。但是我注意到这个错误,即使在模拟器上,当我慢慢地交换UIImages时,却始终如此。

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

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

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

任何想法?谢谢!

回答

1

更有可能的是,您的图片已被过度发布或过早发布 - 在您的应用完成之前发布 - 并且巧合的是,NSDate的实例被分配在与现在相同的地址-defunct图像。

听起来像是一个很大的巧合,但事实并非如此。随时都会发生。

在乐器的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!

+0

谢谢。启用此NSZombieEnabled是否会降低运行时性能? 顺便说一句,我注意到即时通讯运行我的应用程序(模拟器和设备)作为发布版本,但即时通讯仍然看到从NSLog输出。这是正常的吗?如果是这样,我会想象NSLog输出肯定会降低运行时性能。 – AlvinfromDiaspar 2009-09-30 16:38:35

相关问题