iOS中的内存泄漏将图像转换为CVPixelBufferRef

时间:2016-06-23 07:02:22

标签: ios objective-c memory-leaks cvpixelbuffer

我正在尝试将图像转换为CVPixelBufferRef,以便可以进一步使用,但几秒钟后我的应用程序崩溃了。我可以看到应用程序启动的时候是使用2mb这样的内存但是在15到20秒之后它会达到300mb。我的功能是这个

- (CVPixelBufferRef) NpixelBufferFromCGImage: (CGImageRef) image
{
    int height = 300;
    int width = 400;

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                            [NSNumber numberWithBool:YES], kCVPixelBufferCGImageCompatibilityKey,
                            [NSNumber numberWithBool:YES], kCVPixelBufferCGBitmapContextCompatibilityKey,
                            nil];
    CVPixelBufferRef pxbuffer = NULL;

    CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault, width,
                                      height, kCVPixelFormatType_32ARGB, (__bridge CFDictionaryRef) options,
                                      &pxbuffer);

    NSParameterAssert(status == kCVReturnSuccess && pxbuffer != NULL);

    CVPixelBufferLockBaseAddress(pxbuffer, 0);
    void *pxdata = CVPixelBufferGetBaseAddress(pxbuffer);
    NSParameterAssert(pxdata != NULL);

    CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();

    CGContextRef context = CGBitmapContextCreate(pxdata, width,
                                             height, 8, 4*width, rgbColorSpace,
                                             kCGImageAlphaNoneSkipFirst);
    NSParameterAssert(context);
    CGContextConcatCTM(context, CGAffineTransformMakeRotation(0));
    CGContextDrawImage(context, CGRectMake(0, 0, CGImageGetWidth(image),
                                       CGImageGetHeight(image)), image);
    CGColorSpaceRelease(rgbColorSpace);
    CGContextRelease(context);

    CVPixelBufferUnlockBaseAddress(pxbuffer, 0);

    return pxbuffer;
}

我正在为此函数提供ImageRef

1 个答案:

答案 0 :(得分:0)

试试吧 @autoreleasepool {您的方法代码} 在长时间操作和循环的情况下,它对我非常有用