当我使用iOS 4.2最终版SDK在iPad上测试新的4.2.1固件时,这才刚刚开始,但是自从上次在我的设备上测试以来,我已经更改了很多代码,所以我不能100%确定它是否与4.2.1相关,尽管看起来很有可能。我以前用4.2版beta3 SDK测试4.2版beta3,没有问题。
我有一个做一些石英二维绘图的视图。每次我打电话
[self setNeedsDisplay]
在它上更新图形时,应用程序崩溃,信号为0。我以前从来没有遇到过这个问题,并且总是使用那个调用来重新绘制视图,没有问题。
以前有人遇到过这种情况吗?或者有人知道原因是什么吗?车祸发生在之前
drawRect:
是调用的,所以我不确定如何调试它。
它不会在模拟器中崩溃,只会在实际设备上崩溃。
设备上没有生成崩溃日志,调试器中显示的确切错误是:
Program received signal: â0â.
Data Formatters temporarily unavailable, will re-try after a 'continue'. (Unknown error loading shared library "/Developer/usr/lib/libXcodeDebuggerSupport.dylib")
此外,在有人提出使用过多内存作为信号0错误是一个问题之前,当崩溃发生时(在仪器中查看),应用程序只使用了140万字节的RAM,在崩溃之前,我看不到分配的大幅增加或任何东西。它的崩溃与刚刚超过1.4MB使用。
更新:
我已经做了更多的工作,这是我迄今为止发现的。
-
4.2最终版SDK和iOS 4.2.1似乎存在一些问题,但它们似乎与此特定问题无关。
-
我已经降级到4.2测试版3,这是以前为我工作的版本,它仍然以同样的方式崩溃。
-
如果我不重写
牵引力:
在我的类中调用setNeedsDisplay的方法不会崩溃。
-
如果我超越
牵引力:
即使我一直这样(只是打电话
[super drawRect:]
或者让它完全空着)它确实会崩溃。
所以出于某种原因,只需实现
牵引力:
根本就是造成这个问题的原因。但这毫无意义,因为自从我开始这个项目以来,我就以同样的方式实现了这段代码,现在才遇到这个问题。
更新:
结果发现这是一个内存问题,毕竟这与我正在绘制的视图的大小有关。尽管仪器工具似乎出于某种原因没有显示它,但根据本文:
iPhone + UIView. Enormous memory consumption during drawRect. Any strategies for reducing this?
当使用setNeedsDisplay时:在大视图上有一个巨大的内存峰值,解决这个问题的唯一真正方法是使用较小的平铺视图并分别绘制。
我从我的滚动视图中删除了一堆图像,并且能够在没有崩溃的情况下看到内存警告。我发现如果在滚动视图中减小我的绘图视图的大小,我就不会再出现内存错误。我以前的画幅是4000x4000。降低到30000x2000,没有更多的崩溃。
现在我的问题是我需要一个连续的绘图视图,由于我所绘制的内容的性质,我不确定是否可以平铺它。但这是另一个职位的问题。