如果需要返回它,如何释放CGImageRef?

use*_*946 5 macos cocoa core-graphics ios

我有一个方法来调整CGImageRef和返回CGImageRef.问题是最后几行,我需要以某种方式释放,但之后返回.有任何想法吗?谢谢

 -(CGImageRef)resizeImage:(CGImageRef *)anImage width:(CGFloat)width height:(CGFloat)height
{

    CGImageRef imageRef = *anImage;

    CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageRef);

    if (alphaInfo == kCGImageAlphaNone)
        alphaInfo = kCGImageAlphaNoneSkipLast;


    CGContextRef bitmap = CGBitmapContextCreate(NULL, width, height, CGImageGetBitsPerComponent(imageRef), 4 * width, CGImageGetColorSpace(imageRef), alphaInfo);

    CGContextDrawImage(bitmap, CGRectMake(0, 0, width, height), imageRef);

    CGImageRef ref = CGBitmapContextCreateImage(bitmap);

    CGContextRelease(bitmap);
    CGImageRelease(ref); //issue here

    return ref;

}
Run Code Online (Sandbox Code Playgroud)

Tho*_*ing 6

Cocoa内存管理命名策略声明,您拥有一个对象,该对象是从名称以alloc,copynew开头的方法创建的.
Clang静态分析仪也遵守此规则.

请注意,Core Foundation的约定略有不同.详细信息可以在Apple的高级内存管理编程指南中找到.

我修改了上面的方法以符合命名约定.我也在传入时删除了星号anImage,因为CGImageRef它已经是一个指针.(或者这是故意的吗?).
请注意,您拥有已退回的内容CGImage并在CGImageRelease以后使用.

-(CGImageRef)newResizedImageWithImage:(CGImageRef)anImage width:(CGFloat)width height:(CGFloat)height
{
    CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(anImage);
    if (alphaInfo == kCGImageAlphaNone)
    {
        alphaInfo = kCGImageAlphaNoneSkipLast;
    }
    CGContextRef bitmap = CGBitmapContextCreate(NULL, width, height, CGImageGetBitsPerComponent(anImage), 4 * width, CGImageGetColorSpace(anImage), alphaInfo);
    CGContextDrawImage(bitmap, CGRectMake(0, 0, width, height), anImage);
    CGImageRef image = CGBitmapContextCreateImage(bitmap);
    CGContextRelease(bitmap);
    return image;
}
Run Code Online (Sandbox Code Playgroud)