【问题标题】:Having trouble with releases in core graphics在核心图形中发布问题
【发布时间】:2012-06-14 01:47:48
【问题描述】:

我刚刚开始发布核心图形,所以我可能需要一点帮助。

我的代码如下所示:

UIImage *buttonImage() {

UIGraphicsBeginImageContextWithOptions(bounds.size, NO, 0);
    CGContextRef context = UIGraphicsGetCurrentContext();


    CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB();


    CGMutablePathRef outerPath;
    CGMutablePathRef midPath;
    CGMutablePathRef innerPath;
    CGMutablePathRef highlightPath;

//Some button stuff

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    CGContextRelease(context);

    return image;

}

那个发布行,我已经输入了。但是我遇到了一个错误:

context_reclaim: invalid context
context_finalize: invalid context

关于在这种情况下我应该将版本放在哪里有什么想法吗?

【问题讨论】:

    标签: iphone objective-c ios core-graphics drawrect


    【解决方案1】:

    如果您之前已经完成了CFRetain(context)CGContextRetain(context),或者您自己创建了上下文,您只需要执行CGContextRelease(context)。在您的示例中,您正在调用 UIGraphicsBeginImageContextWithOptions(),它正在为您处理上下文的创建,因此,您自己调用 CGContextRelease() 会过度释放它。

    您确实需要平衡CGColorSpaceCreateDeviceRGB() 与以下任一:

    CGColorSpaceRelease(baseSpace)
    

    或:

    if (baseSpace) CFRelease(baseSpace)
    

    【讨论】:

      【解决方案2】:

      使用UIGraphicsGetCurrentContext 时,您不拥有上下文。因此,您不应该释放它。如果您要使用CGContextRetain(),那么您将释放。更多信息可在此处获得:

      Memory Management Guide for Core Foundation

      我强烈建议阅读Memory Management 编程指南以了解其工作原理。

      【讨论】:

        猜你喜欢
        • 2019-09-25
        • 1970-01-01
        • 2020-05-14
        • 2021-10-04
        • 2021-07-20
        • 1970-01-01
        • 2017-02-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多