在ImageContext中创建UIImage自动释放

时间:2015-02-09 17:11:30

标签: ios objective-c uiimage

我正在自动释放池中绘制一个ImageContext来控制我的内存占用,并从自动释放池内部返回图像。我在这个调用中遇到了崩溃,我想知道它是否是由调用函数使用之前在自动释放池中释放的图像引起的。这是我的代码:

-( UIImage *)   imageRepFromShapes
{
    CGRect sheetDisplayView = [ UIScreen mainScreen ].bounds;


    @autoreleasepool {

        UIGraphicsBeginImageContextWithOptions( boundingRect_m.size, NO, 0.0 );

        CGContextRef context = UIGraphicsGetCurrentContext();
        UIGraphicsPushContext(context);
        for ( Shape *shape in arryOfShapes ) {
            [ shape drawShape ];
        }
        UIGraphicsPopContext();

        UIImage     *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return image;
    }
}

另一个问题是我是否需要在此调用中使用UIGraphicsPushContext和UIGraphicsPopContext,它们是否在正确的位置。 我希望澄清这一点。 谢谢

1 个答案:

答案 0 :(得分:4)

return移到自动释放池之外,以确保不会丢失图像。执行以下操作之一:

<强> ARC

UIImage *image = nil;
@autoreleasepool {
    // ...
    image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
}
return image;

<强>非ARC

UIImage *image = nil;
@autoreleasepool {
    // ...
    image = [UIGraphicsGetImageFromCurrentImageContext() retain];
    UIGraphicsEndImageContext();
}
return [image autorelease];