Как исправить базовый базовый объект с удержанием +1 (ARC)?

Вот мой метод:

CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(aSampleBuffer);

CIImage *ciImage = [CIImage imageWithCVPixelBuffer:imageBuffer];

CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef myImage = [context
                      createCGImage:ciImage
                      fromRect:CGRectMake(0, 0,
                                          CVPixelBufferGetWidth(imageBuffer),
                                          CVPixelBufferGetHeight(imageBuffer))];

return [UIImage imageWithCGImage:myImage];

Но последняя строка показывает мне Potential leak of an object stored into 'myimage'и строка myImage Method returns a Core Foundation object with a +1 retain count, Но мое приложение поддерживает ARC, поэтому я не могу release что-то. Как я могу это исправить? Благодарю.

2 ответа

Решение

В моем приложении включена поддержка ARC, поэтому я не могу что-то выпустить

Неправильно. ARC мешает вам отправить release сообщение объектам Objective C, так как это управляет их памятью для вас.

Однако вам все равно придется вручную управлять памятью в любом другом случае (например, структурами C). Вы можете - и должны - использовать retain/release функции на таких структурах, когда это уместно.

В этом случае вы должны вручную позвонить CGImageRelease на myImage, балансируя счет удержания, действуя (как предложено H2CO3)

    UIImage *retVal = [UIImage imageWithCGImage:myImage];
    CGImageRelease(myImage);
    return retVal;
UIImage *retVal = [UIImage imageWithCGImage:myImage];
CGImageRelease(myImage);
return retVal;
Другие вопросы по тегам