Iphone 在UIView中调用[self-setNeedsDisplay]每次都会崩溃
当我使用iOS 4.2 final SDK在我的iPad上使用新的4.2.1固件进行测试时,这种情况才开始发生。但是,自从上次在我的设备上进行测试以来,我已经更改了很多代码,所以我不能100%确定它与4.2.1相关,尽管这似乎很有可能。我之前使用4.2 beta3 SDK在4.2 beta3上测试,没有问题 我有一个视图,可以绘制一些石英二维图形。每次我在它上面调用Iphone 在UIView中调用[self-setNeedsDisplay]每次都会崩溃,iphone,objective-c,Iphone,Objective C,当我使用iOS 4.2 final SDK在我的iPad上使用新的4.2.1固件进行测试时,这种情况才开始发生。但是,自从上次在我的设备上进行测试以来,我已经更改了很多代码,所以我不能100%确定它与4.2.1相关,尽管这似乎很有可能。我之前使用4.2 beta3 SDK在4.2 beta3上测试,没有问题 我有一个视图,可以绘制一些石英二维图形。每次我在它上面调用[self-setNeedsDisplay]来更新图形时,应用程序都会崩溃,并发出信号0。我以前从来没有遇到过这个问题,并且总是使用
[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错误经常出现),当崩溃发生时,应用程序只使用了1.4mb内存(在仪器中查看),在崩溃之前,我没有看到分配的大峰值或任何东西。它在使用超过1.4mb时崩溃
更新:我一直在做更多的工作,以下是我到目前为止的发现
drawRect:
方法并调用setNeedsDisplay,则不会崩溃drawRect:
,即使我将其保留为empy(只需调用[super-drawRect:
,甚至将其完全保留为空),它也会崩溃drawRect:
就造成了这个问题。这是毫无意义的,因为自从我开始这个项目以来,我就以同样的方式实现了这段代码,现在才遇到这个问题
更新:事实证明这是一个内存问题,毕竟它与我正在绘制的视图的大小有关。尽管Instruments工具似乎出于某种原因没有显示它,但根据这篇文章:当使用setNeedsDisplay时:在大视图上有一个巨大的内存尖峰,唯一真正解决它的方法是使用较小的平铺视图并分别绘制每个视图 我从scrollview中删除了一堆图像,并且能够在没有崩溃的情况下看到内存警告。我发现,如果在滚动视图中减小图形视图的大小,就不会再出现内存错误。我以前的绘图视图几乎是4000x4000。将其降低到3000x2000,不再发生碰撞 现在的问题是,我需要一个连续的工程视图,由于我所绘制的内容的性质,我不确定是否可以平铺它。但这是另一篇文章的问题。试试这个
基本上这可能是内存问题。发布崩溃发生的情况。您确实会收到崩溃报告,这些将帮助我们帮助您。您在哪里调用setNeedsDisplay?是否有可能在后台线程上调用
setNeedsDisplay
?在UIView子类中的方法中调用setNeedsDisplay。该方法由NSNotification调用。为了排除任何线程问题,我尝试使用performSelectorOnMainThread,结果相同。//它似乎没有在设备上产生任何崩溃长时间,只是显示一个信号0并崩溃。我将在问题的末尾粘贴确切的错误。请尝试删除设备上的应用程序,然后通过Xcode重新安装。我遇到了一个奇怪但类似的问题,在升级到4.2最终SDK和iOS 4.2.1之后,核心数据模型未能正确编译和安装,这似乎已经解决了这个问题。我已经阅读了这篇文章。正如我在问题中所说,我意识到这些通常是内存问题,但在本例中并非如此。当应用程序崩溃时,它正在使用全部1.4mb的ram。此外,它在4.2 beta 3上运行良好,只是现在在4.2.1决赛上崩溃了。我的另一个应用程序也有一些奇怪的符号问题,因为我已经更新到4.2.1(当它崩溃时,它不会显示我调试到,而是抱怨缺少一个文件),所以我将从头开始重新安装Xcode,看看这是否有什么不同。当我更新Xcode的时候,似乎有些事情搞砸了。事实上,看起来你毕竟是对的。尽管由于某种原因,Instruments工具似乎没有显示它,但根据这篇文章:当使用setNeedsDisplay时:在大视图上有一个内存尖峰。我从scrollview中删除了一堆图像,并且能够在没有崩溃的情况下看到内存警告。我发现,如果在滚动视图中减小图形视图的大小,就不会再出现内存错误。我以前的视野几乎是4000x4000。将其降低到3000x2000,不再发生碰撞。很好。很高兴你能修好它。我知道文档建议的值不超过1024x1024(请注意UIView类参考顶部)。我想你找到原因了。