【问题标题】:Crash during drawAtPoint, code works on iPad Air, iPad simulator, crashes on iPad 1 and iPad minidrawAtPoint 期间崩溃,代码在 iPad Air、iPad 模拟器上运行,在 iPad 1 和 iPad mini 上崩溃
【发布时间】:2014-04-18 20:40:19
【问题描述】:

我有一些代码试图将 png 渲染到图形上下文。该代码在所有模拟器中运行良好,在 iPad Air 上运行良好。但是当我在 iPad mini 或 iPad 上运行它时,在连接到 xCode 时运行它时会出现以下崩溃:

ImageIO`ImageIO_ABGR_TO_ARGB_8Bit: 0x36f27c70: push {r4, r5, r6, r7, lr} 0x36f27c72: add r7, sp, #0xc 0x36f27c74: push.w {r8, r10, r11} 0x36f27c78: ldr r1, [r0] 0x36f27c7a: ldr r2, [r0, #0xc] 0x36f27c7c: cmp.w r2, r1, lsl #2 0x36f27c80: blo 0x36f27d06 ; ImageIO_ABGR_TO_ARGB_8Bit + 150 0x36f27c82: ldr r3, [r0, #0x18] 0x36f27c84: lsls r2, r1, #0x2 0x36f27c86: cmp r3, r2 0x36f27c88: blo 0x36f27d06 ; ImageIO_ABGR_TO_ARGB_8Bit + 150 0x36f27c8a: ldr r2, [r0, #0x4] 0x36f27c8c: cmp r2, #0x0 0x36f27c8e: beq 0x36f27d06 ; ImageIO_ABGR_TO_ARGB_8Bit + 150 0x36f27c90: bic lr, r1, #0x7 0x36f27c94: ldr r3, [r0, #0x8] 0x36f27c96: ldr.w r12, [r0, #20] 0x36f27c9a: sub.w r4, r1, lr 0x36f27c9e: asrs r5, r1, #0x3 0x36f27ca0: mov r6, r12 0x36f27ca2: mov r8, r3 0x36f27ca4: cbz r5, 0x36f27cbe ; ImageIO_ABGR_TO_ARGB_8Bit + 78 0x36f27ca6: mov r8, r3 0x36f27ca8: mov r9, r5 0x36f27caa: mov r6, r12 0x36f27cac: vld4.8 {d0, d1, d2, d3}, [r8]! 0x36f27cb0: vswp d0, d2 0x36f27cb4: vst4.8 {d0, d1, d2, d3}, [r6]! <<--- crash on this line 0x36f27cb8: subs.w r9, r9, #0x1

这是产生崩溃的代码:

NSString* imgFile = @"ShotZones.png";
UIImage* img = [UIImage imageNamed:imgFile];
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
float scaleShotZoneFeetToPixels = img.size.width / shotZoneCourtSizeInFeet.x;
CGRect courtRect = {{0, 0}, img.size};
CGFloat scaleFactor = screenWidth / courtRect.size.width;
UIGraphicsBeginImageContext(img.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextScaleCTM(context, scaleFactor, scaleFactor);
[img drawAtPoint: courtRect.origin];

它在调用 drawAtPoint 时崩溃(在单独的线程中)。单步执行代码时,所有计算值都与在 xCode 模拟器中运行时相同,UIImage 不为空等。这是由于 iPad 上的处理能力有限还是内存有限?关于如何解决的任何想法?

谢谢!

  • 戴夫

【问题讨论】:

  • 图片有多大?
  • 调试器说什么?
  • 图片大小为 3680x3464,大约是文件大小的一半。这似乎不是很大,但我将尝试降低分辨率,看看是否有帮助。如果是内存相关,很遗憾模拟器无法模拟实际设备的内存限制——这个东西在模拟器中调试起来要容易得多!
  • 我不确定您对调试器的要求是什么,但它崩溃的行有一个 EXC_BAD_ACCESS 异常。
  • 一个大小为 3680x3464 的 UIImage 在加载时将占用大约 50MB 的内存。太大了。

标签: ios ipad crash uiimage


【解决方案1】:

好的,我开始工作了。这是图像的分辨率。我将它减少了 4 倍,现在它可以工作了。我假设设备内存不足。如果有人知道如何配置模拟器来模拟 iPad 1 或 mini 的内存容量,我将不胜感激。我希望能够尽可能在模拟器中调试/测试!

【讨论】:

    猜你喜欢
    • 2017-11-29
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 2012-11-26
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多