gpt4 book ai didi

ios - Dispatch Queue 中的 CIFilters 在启用 ARC 的项目中导致内存问题

转载 作者:行者123 更新时间:2023-12-01 16:44:00 25 4
gpt4 key购买 nike

我正在运行一些 CIFilters 来模糊图形,它非常滞后,所以我将我的代码包装在

dispatch_async(dispatch_get_main_queue(), ^{ /*...*/ });

一切都加速了,它摇摆不定!处理速度非常快,无缝模糊,太棒了!

大约一分钟后,尽管应用程序因 250Mb 内存而崩溃(当我不使用调度时,我只持续使用大约 50Mb 内存,因为 ARC 管理这一切)

我在整个项目中都使用了 ARC,所以我尝试通过在调度线程中释放 CIFilter 来手动管理内存,但是 xCode 不断返回错误并且不会让我手动释放,因为我使用的是 ARC。在这一点上,关闭 ARC 并检查每个 .m 文件并手动管理内存将是一件非常麻烦的事情。

那么我如何专门管理我的 CIFilter 的调度内存呢?

我尝试将其全部包装在 @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;

最佳答案

你发布 cgImage 吗?

CGImageRelease(cgImage);

关于ios - Dispatch Queue 中的 CIFilters 在启用 ARC 的项目中导致内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21691285/

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