0
我知道這個問題以前曾被問過,但似乎沒有任何工作。CGImageRef沒有在ARC下發布
我有一個返回使用CIImage
和CGIImage
一個濾波後的圖像的一個靜態方法中,我使用上RayWenderlich.com實施例和改變了它返回一個UIImage的,而不是直接將其設置爲一個的UIImageView的。
我的問題是CGImageRef cgimg
永遠不會被釋放。這導致相當快速的內存泄漏。我究竟做錯了什麼?
+ (UIImage *)image:(UIImage *)image withFilterName:(NSString *)filterName
{
if (!image)
return nil;
@autoreleasepool {
CIImage *beginImage = [[CIImage alloc] initWithCGImage:image.CGImage];
CIContext *context = [CIContext contextWithOptions:nil];
CIFilter *filter = [CIFilter filterWithName:@"CIPhotoEffectProcess"]
[filter setValue:beginImage forKey:kCIInputImageKey];
CIImage *outputImage = [filter outputImage];
CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *newImage = [UIImage imageWithCGImage:cgimg];
CGImageRelease(cgimg);
return newImage;
}
}
我只是在這裏猜測,但因爲CGImageRef不是NSObject的子類(因此沒有'retain'和'release'選擇器),我很確定ARC不會計算它。 – 2014-10-09 14:32:07
我沒有看到您發佈的代碼有任何問題。你用'newImage'做什麼? – 2014-10-09 14:40:35