gpt4 book ai didi

ios - 即使已发布 CIImageRefs,CIContext 内存泄漏

转载 作者:可可西里 更新时间:2023-11-01 03:33:47 24 4
gpt4 key购买 nike

我正在使用找到的解决方案 here使用 CIGaussianBlur 模糊图像。但是,我遇到无法解决的内存泄漏。我最初使用的是不使用 CIContext 作为属性,但认为这可能是无济于事的问题。我还使用了输出图像中的 CGRect,但将其更改为尝试关闭泄漏,但再次无效。

我相信我正在释放我需要的所有东西(ARC 已打开),那么可能导致内存泄漏的原因是什么?

    CIFilter *gaussianBlurFilter = [CIFilter filterWithName: @"CIGaussianBlur"];
CGImageRef cgimage = [image CGImage];
[gaussianBlurFilter setValue:[CIImage imageWithCGImage:cgimage] forKey:kCIInputImageKey];
[gaussianBlurFilter setValue:@10 forKey:kCIInputRadiusKey];
CIImage *outputImage = [gaussianBlurFilter outputImage];
if (imageContext == nil) {
imageContext = [CIContext contextWithOptions:nil];
}
CGImageRef cgimg = [imageContext createCGImage:outputImage fromRect:CGRectMake(0.0, 0.0, 25.0, 25.0)];
UIImage *blurredImage = [UIImage imageWithCGImage:cgimg];

pictureIncognito.image = blurredImage;
pictureIncognito.layer.cornerRadius = pictureIncognito.frame.size.width / 2.0;
pictureIncognito.layer.masksToBounds = YES;
pictureIncognito.layer.borderWidth = 1.0;
pictureIncognito.layer.borderColor = [[UIColor whiteColor] CGColor];

CGImageRelease(cgimage);
CGImageRelease(cgimg);

enter image description here

最佳答案

编辑:

https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGContext/Reference/reference.html#//apple_ref/c/func/CGContextRelease

我今天遇到了这个。事实上,您确实需要使用此特殊功能释放上下文。


我的答案来自this question.

作为观察,我认为您不需要这一行:

CGImageRelease(cgimage);

您实际上并不拥有该对象(您用来设置它的方法中没有“get”、“alloc”、“create”或“new”)。

我对 CGImage 没有太多经验,但我想上下文仍然存在于 Objective-C 运行时的某个地方,并且上下文以某种方式保留了图像本身。因此,将上下文(以及其他所有内容)设置为 nil 可能会解决问题。

当然,如果这可行,那么这意味着您将为每个模糊的图像创建一个新的上下文,这可能会影响您以后修改图像的能力……但它可能会解决内存泄漏问题!

关于ios - 即使已发布 CIImageRefs,CIContext 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23159988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com