相关疑难解决方法(0)

iOS:核心图像和多线程应用程序

我试图以最有效的方式运行一些核心图像过滤器.试图避免内存警告和崩溃,这是我在渲染大图像时得到的.我正在看Apple的核心图像编程指南.关于多线程,它说:"每个线程必须创建自己的CIFilter对象.否则,你的应用程序可能会出现意外行为."

这是什么意思?

我实际上试图在后台线程上运行我的过滤器,所以我可以在主线程上运行HUD(见下文).这在coreImage的上下文中是否有意义?我认为核心图像固有地使用GCD.

//start HUD code here, on main thread

// Get a concurrent queue form the system
dispatch_queue_t concurrentQueue =
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(concurrentQueue, ^{

    //Effect image using Core Image filter chain on a background thread

    dispatch_async(dispatch_get_main_queue(), ^{

        //dismiss HUD and add fitered image to imageView in main thread

    });

});
Run Code Online (Sandbox Code Playgroud)

更多来自Apple Docs:

保持线程安全

CIContext和CIImage对象是不可变的,这意味着每个对象都可以在线程之间安全地共享.多个线程可以使用相同的GPU或CPU CIContext对象来呈现CIImage对象.但是,对于可变的CIFilter对象,情况并非如此.无法在线程之间安全地共享CIFilter对象.如果您的应用程序是多线程的,则每个线程都必须创建自己的CIFilter对象.否则,您的应用可能会出现意外行为.

multithreading core-image grand-central-dispatch ios

7
推荐指数
1
解决办法
3876
查看次数

CIImage内存泄漏

我正在使用以下方法模糊一些图像.使用仪器CIImage正在泄漏.我尝试将它们包装在@autoreleasepool中,但没有运气.有任何想法吗?

-(UIImage *)blurImage:(UIImage *)image withStrength:(float)strength
{
    @autoreleasepool {
        CIContext *context = [CIContext contextWithOptions:nil];
        CIImage *inputImage = [[CIImage alloc] initWithCGImage:image.CGImage];
        CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];
        [filter setValue:inputImage forKey:@"inputImage"];
        [filter setValue:[NSNumber numberWithFloat:strength] forKey:@"inputRadius"];

        CIImage *result = [filter valueForKey:kCIOutputImageKey];
        float scale =  [[UIScreen mainScreen] scale];
        CIImage *cropped=[result imageByCroppingToRect:CGRectMake(0, 0, image.size.width*scale, image.size.height*scale)];
        CGRect extent = [cropped extent];
        CGImageRef cgImage = [context createCGImage:cropped fromRect:extent];
        UIImage *returnImage = [UIImage imageWithCGImage:cgImage].copy;

        CGImageRelease(cgImage);

        return returnImage;
    }

}
Run Code Online (Sandbox Code Playgroud)

memory-leaks objective-c ios ciimage

3
推荐指数
1
解决办法
5988
查看次数