用户交互式核心图形行没有内存警告/崩溃

时间:2014-02-18 08:38:27

标签: ios iphone cocoa-touch core-graphics didreceivememorywarning

我正在开发一个项目,该项目涉及用户在UIImage之上与Core Graphics中呈现的直线进行交互。该行的每一端都有一个“句柄”供用户与之交互。拖动时,调用setNeedsDisplay并重新绘制线条,因为长度和角度会发生变化。

我正在使用以下代码重绘该行。这很简单,但我开始认为Core Graphics可能不是正确的方法。

以下内容由drawRect调用:

- (void)drawLines {
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSaveGState(ctx);

    CGContextBeginPath(ctx);
    CGContextSetStrokeColorWithColor(ctx, [[UIColor blueColor] CGColor]);
    CGContextSetLineWidth(ctx, 6.0);
    CGContextSetAlpha(ctx, 1.0);
    CGContextMoveToPoint(ctx, pointA.x, pointA.y);
    CGContextAddLineToPoint(ctx, pointB.x, pointB.y);
    CGContextStrokePath(ctx);

    CGContextRestoreGState(ctx);
    }

编辑: 我面临的问题是,当我快速拖动此项目时,内存使用量会激增,我会收到内存警告,然后崩溃。 Xcode说“因内存压力而终止。”

提前感谢您的想法!

1 个答案:

答案 0 :(得分:0)

解决。 UIView的大小太大了。在如此巨大的UIView上调用setNeedsDisplay将导致内存峰值和崩溃。 Apple过去常常将UIView限制为1024x1024。虽然这不再是限制,但他们仍然建议保持较小的尺寸,以减少内存占用。

来源:https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/uiview/uiview.html