Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone iOS-我应该在哪里发布我的CFImageRef?_Iphone_Objective C_Core Foundation - Fatal编程技术网

Iphone iOS-我应该在哪里发布我的CFImageRef?

Iphone iOS-我应该在哪里发布我的CFImageRef?,iphone,objective-c,core-foundation,Iphone,Objective C,Core Foundation,我有一个返回旋转图像的方法: - (CGImageRef)rotateImage:(CGImageRef)original degrees:(float)degrees { if (degrees == 0.0f) { return original; } else { double radians = degrees * M_PI / 180; #if TARGET_OS_EMBEDDED || TARGET_IPHONE_SIMULATOR

我有一个返回旋转图像的方法:

- (CGImageRef)rotateImage:(CGImageRef)original degrees:(float)degrees {
    if (degrees == 0.0f) {
        return original;
    } else {
        double radians = degrees * M_PI / 180;

#if TARGET_OS_EMBEDDED || TARGET_IPHONE_SIMULATOR
        radians = -1 * radians;
#endif

        size_t _width = CGImageGetWidth(original);
        size_t _height = CGImageGetHeight(original);

        CGRect imgRect = CGRectMake(0, 0, _width, _height);
        CGAffineTransform _transform = CGAffineTransformMakeRotation(radians);
        CGRect rotatedRect = CGRectApplyAffineTransform(imgRect, _transform);

        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
        CGContextRef context = CGBitmapContextCreate(NULL,
                                                     rotatedRect.size.width,
                                                     rotatedRect.size.height,
                                                     CGImageGetBitsPerComponent(original),
                                                     0,
                                                     colorSpace,
                                                     kCGImageAlphaPremultipliedFirst);
        CGContextSetAllowsAntialiasing(context, FALSE);
        CGContextSetInterpolationQuality(context, kCGInterpolationNone);
        CGColorSpaceRelease(colorSpace);

        CGContextTranslateCTM(context,
                              +(rotatedRect.size.width/2),
                              +(rotatedRect.size.height/2));
        CGContextRotateCTM(context, radians);

        CGContextDrawImage(context, CGRectMake(-imgRect.size.width/2,
                                               -imgRect.size.height/2,
                                               imgRect.size.width,
                                               imgRect.size.height),
                           original);

        CGImageRef rotatedImage = CGBitmapContextCreateImage(context);
        CFRelease(context);

        return rotatedImage;
    }
}
然而,仪器告诉我,
rotateImage:
并没有被释放。我经常使用这个方法,所以内存会增加很多。我应该在调用
rotateImage:
的父方法中释放它吗?或者我应该在
rotateImage:
传回之前释放它吗


谢谢

我建议在调用
rotateImage:

此外,在这种情况下,您应该使用命名约定并将
rotateImage:
重命名为
createRotateImage:
,以确保清晰性。

不仅仅是为了清晰性:使用正确的命名约定,静态分析器可以检查调用方是否根据需要释放图像。返回自动删除的UIImage如何([UIImage imageWithCGImage:RotateImage]),然后在返回之前释放图像引用。