使用Core Graphics时“对象的潜在泄漏”

时间:2016-01-15 23:02:59

标签: ios objective-c core-graphics

我的应用使用以下代码绘制阴影:

-(void)drawShadow:(CGContextRef)context rect:(CGRect)rect{

    CGContextSaveGState(context);

    //Set color of current context
    [[UIColor blackColor] set];

    //Set shadow and color of shadow
    CGContextSetShadowWithColor(context, CGSizeMake(0, 2), 3, [[UIColor colorWithWhite:0 alpha:0.5] CGColor]);

    CGContextFillEllipseInRect(context, rect);

    CGContextClipToMask(context, rect, CGBitmapContextCreateImage(context));

    CGContextRestoreGState(context); // Warning shows in this line

}

当我运行Product>分析,它标记了该块的最后一条指令,其中包含以下消息:“对象的潜在泄漏”。当我删除该行时,它会在结束括号中显示相同的消息。

知道我做错了什么?

由于

2 个答案:

答案 0 :(得分:2)

我认为CGBitmapContextCreateImage正在泄漏。

尝试将其分配给局部变量,然后在剪切为蒙版时调用CGImageRelease

Another iPhone - CGBitmapContextCreateImage Leak

答案 1 :(得分:0)

chedabob的答案奏效了!这是最终的代码:

-(void)drawShadow:(CGContextRef)context rect:(CGRect)rect{
    CGContextSaveGState(context);
    //Set color of current context
    [[UIColor blackColor] set];
    //Set shadow and color of shadow
    CGContextSetShadowWithColor(context, CGSizeMake(0, 2), 3, [[UIColor colorWithWhite:0 alpha:0.5] CGColor]);
    CGContextFillEllipseInRect(context, rect);

    CGImageRef bitmap = CGBitmapContextCreateImage(context);
    CGContextClipToMask(context, rect, bitmap);
    CGContextRestoreGState(context);

    CGImageRelease(bitmap);
}