代码之家  ›  专栏  ›  技术社区  ›  Ben Baron

每次在uiview中调用[self-setneedsDisplay]都会崩溃

  •  1
  • Ben Baron  · 技术社区  · 14 年前

    当我使用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使用。


    更新: 我已经做了更多的工作,这是我迄今为止发现的。

    1. 4.2最终版SDK和iOS 4.2.1似乎存在一些问题,但它们似乎与此特定问题无关。
    2. 我已经降级到4.2测试版3,这是以前为我工作的版本,它仍然以同样的方式崩溃。
    3. 如果我不重写 牵引力: 在我的类中调用setNeedsDisplay的方法不会崩溃。
    4. 如果我超越 牵引力: 即使我一直这样(只是打电话 [super drawRect:] 或者让它完全空着)它确实会崩溃。

    所以出于某种原因,只需实现 牵引力: 根本就是造成这个问题的原因。但这毫无意义,因为自从我开始这个项目以来,我就以同样的方式实现了这段代码,现在才遇到这个问题。


    更新: 结果发现这是一个内存问题,毕竟这与我正在绘制的视图的大小有关。尽管仪器工具似乎出于某种原因没有显示它,但根据本文: iPhone + UIView. Enormous memory consumption during drawRect. Any strategies for reducing this? 当使用setNeedsDisplay时:在大视图上有一个巨大的内存峰值,解决这个问题的唯一真正方法是使用较小的平铺视图并分别绘制。

    我从我的滚动视图中删除了一堆图像,并且能够在没有崩溃的情况下看到内存警告。我发现如果在滚动视图中减小我的绘图视图的大小,我就不会再出现内存错误。我以前的画幅是4000x4000。降低到30000x2000,没有更多的崩溃。

    现在我的问题是我需要一个连续的绘图视图,由于我所绘制的内容的性质,我不确定是否可以平铺它。但这是另一个职位的问题。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Community CDub    7 年前

    试试这个 Other Answer/Solution 基本上,这可能是一个记忆问题。