我正在运行一些CIF过滤器来模糊图形并且它非常迟钝所以我将代码包装在
中dispatch_async(dispatch_get_main_queue(), ^{ /*...*/ });
一切都加快了,摇摇晃晃!非常快速的处理,无缝模糊,非常棒!
大约一分钟后应用程序崩溃了250Mb内存(当我不使用调度时,我只使用大约50Mb内存,因为ARC管理所有内存)
我在整个项目中都使用了ARC,所以我尝试通过在调度线程中释放CIFilter来手动管理内存,但是xCode不断返回错误,因为我使用ARC,所以不会让我手动释放。在这一点上,关闭ARC并遍历每个.m文件并手动管理内存将是一个疯狂的麻烦。
那么我如何专门管理我的CIFilters的调度内存?
我尝试将它全部包裹在@autoreleasepool { /*...*/ }
中(ARC奇怪地允许哪些?)但它没有用。 /:
调度线程内的示例代码:
UIImage *theImage5 = imageViewImDealingWith.image;
CIContext *context5 = [CIContext contextWithOptions:nil];
CIImage *inputImage5 = [CIImage imageWithCGImage:theImage5.CGImage];
// setting up Gaussian Blur (we could use one of many filters offered by Core Image)
CIFilter *filter5 = [CIFilter filterWithName:@"CIGaussianBlur"];
[filter5 setValue:inputImage5 forKey:kCIInputImageKey];
[filter5 setValue:[NSNumber numberWithFloat:5.00f] forKey:@"inputRadius"];
CIImage *result = [filter5 valueForKey:kCIOutputImageKey];
// CIGaussianBlur has a tendency to shrink the image a little,
// this ensures it matches up exactly to the bounds of our original image
CGImageRef cgImage = [context5 createCGImage:result fromRect:[inputImage5 extent]];
imageViewImDealingWith.image = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
context5 = nil;
inputImage5 = nil;
filter5 = nil;
result = nil;
答案 0 :(得分:0)
你发布了cgImage吗?
CGImageRelease(cgImage);