ios - 应用核心图像过滤器时处理内存警告

标签 ios automatic-ref-counting core-image

我正在使用以下代码来应用图像过滤器。这对于缩小的图像效果很好。 但是,当我在全分辨率图像上应用 2 个以上的滤镜时,应用程序崩溃了。收到内存警告。

当我打开“分配”工具时,我看到 CFData(store) 占用了程序使用的大部分内存。 当我在全分辨率图像上应用 2 个以上滤镜时,“总字节”将达到 54MB。虽然当我用眼睛观察这些数字时,“事件字节”似乎没有达到超过 12MB,但峰值表明事件字节也达到了这个数字并返回。

我哪里出错了?

- (UIImage *)editImage:(UIImage *)imageToBeEdited tintValue:(float)tint 
{ 
CIImage *image = [[CIImage alloc] initWithImage:imageToBeEdited]; 
NSLog(@"in edit Image:\ncheck image: %@\ncheck value:%f", image, tint); 

[tintFilter setValue:image forKey:kCIInputImageKey]; 
[tintFilter setValue:[NSNumber numberWithFloat:tint] forKey:@"inputAngle"]; 

CIImage *outputImage = [tintFilter outputImage]; 
NSLog(@"check output image: %@", outputImage); 
return [self completeEditingUsingOutputImage:outputImage]; 
} 

- (UIImage *)completeEditingUsingOutputImage:(CIImage *)outputImage 
{ 
CGImageRef cgimg = [context createCGImage:outputImage fromRect:outputImage.extent]; 
NSLog(@"check cgimg: %@", cgimg); 
UIImage *newImage = [UIImage imageWithCGImage:cgimg]; 
NSLog(@"check newImge: %@", newImage); 
CGImageRelease(cgimg); 
return newImage; 
} 

编辑: 我也尝试将 cgimg 设置为 nil。没有帮助。 我尝试将上下文声明和定义放在第二个函数中。没有帮助。 我尝试在函数内移动过滤器的声明和定义,但没有帮助。

崩溃发生在

CGImageRef cgimg = [context createCGImage:outputImage fromRect:outputImage.extent]; 

最佳答案

我正在制作的cgimg占用了内存中的大部分空间并且没有被释放。

我观察到,使用较小的值调用文件管理器会将 CFData(存储)内存值恢复为较小的值,从而避免崩溃。

所以我应用过滤器,然后调用相同的过滤器,图像为“nil”。应用所有 4 个过滤器后,这会将内存从 48 MB 恢复到 484kb 或其他值。

此外,我将此过滤器应用于后台线程而不是主线程。再次在主线程上应用会导致崩溃。可能没有足够的时间来释放内存。我不知道。 但这些事情现在进展顺利。

关于ios - 应用核心图像过滤器时处理内存警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12301810/

相关文章:

swift - 异步函数调用与无主对象的取消初始化发生冲突

iphone - 在 iOS 4 上运行 iOS 5 应用程序有困难

cocoa - 如何递归使用 CIFilter 的输出作为新输入?

objective-c - CIFilter - 无法更改名称

objective-c - 我应该寻找什么可能会增加我在不解除分配的 UIViewController 中的保留计数

ios - UINavigationBar 在 iOS 7 中使用自定义颜色模糊

iphone - UILabel 的 sizeThatFits 是否返回它的高度?

ios - 为什么在 Xcode 7.2.1 中创建项目存档时出现此链接器错误

cocoa-touch - 弧: Getting EXC_BAD_ACCESS from inside block used in delegate method

ios - CIColorMatrix 数学没有意义