在核心图形中发布时出现问题

And*_*rew 4 iphone core-graphics objective-c drawrect ios

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

我的代码看起来像这样:

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;

}
Run Code Online (Sandbox Code Playgroud)

那个释放线,我已经放入了.虽然我收到了错误:

context_reclaim: invalid context
context_finalize: invalid context
Run Code Online (Sandbox Code Playgroud)

关于我应该在这个实例中放置版本的任何想法?

icc*_*cir 6

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

你需要平衡CGColorSpaceCreateDeviceRGB()与a:

CGColorSpaceRelease(baseSpace)
Run Code Online (Sandbox Code Playgroud)

或者:

if (baseSpace) CFRelease(baseSpace)
Run Code Online (Sandbox Code Playgroud)


skr*_*ram 6

使用时不拥有上下文UIGraphicsGetCurrentContext.因此你不应该释放它.如果你要使用CGContextRetain()那么你会释放.有关这方面的更多信息,请访问:

核心基础内存管理指南

我强烈建议您阅读Memory Management编程指南,以了解它的工作原理.