Как исправить базовый базовый объект с удержанием +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;