Iphone 在UIView中调用[self-setNeedsDisplay]每次都会崩溃

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。我以前从来没有遇到过这个问题,并且总是使用

当我使用iOS 4.2 final 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错误经常出现),当崩溃发生时,应用程序只使用了1.4mb内存(在仪器中查看),在崩溃之前,我没有看到分配的大峰值或任何东西。它在使用超过1.4mb时崩溃


更新:我一直在做更多的工作,以下是我到目前为止的发现

  • 4.2最终SDK和iOS 4.2.1似乎存在一些问题,但它们似乎与此特定问题无关
  • 我已经降级到4.2 beta 3,这是以前为我工作,它仍然以同样的方式崩溃
  • 如果我不重写类中的
    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类参考顶部)。我想你找到原因了。