2

我正在尝试实现一种根据滑块值更改图像色调的方法,但是当我连续更改滑块值时,它会显示内存警告并且应用程序崩溃。

这是我的示例代码,我尝试使用 dispatch_async

-(void)valueChanged
{
    float slideValue = slider.value;
    NSLog(@"%0.f",slideValue);

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0.5), ^{

    dispatch_async(dispatch_get_main_queue(), ^{
            [filter setValue:@(slideValue)
                      forKey:@"inputIntensity"];
            CIImage *outputImage = [filter outputImage];


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

            UIImage *newImage = [UIImage imageWithCGImage:cgimg];
            imageView.image = newImage;


       });

    });

}
4

2 回答 2

7

您正在泄漏内存,这意味着您正在分配未释放的对象,因此会出现内存警告。

您是否尝试在使用后发布图像?

CGImageRelease(cgimg)

在方法结束时

于 2013-11-12T09:00:20.393 回答
1

检查 API 的文档createCGImage:fromRect:它说的返回值,

当您不再需要返回的图像时,您有责任释放它。

例如,这意味着您正在泄漏内存cgimg。正如 Antonio MG 所建议的,您应该在最后发布参考。将imageWithCGImage:保留它,因此无需担心。

希望有帮助!

于 2013-11-12T09:10:23.120 回答