在Dispatch Queue中加载照片的错误

时间:2012-03-11 07:49:48

标签: iphone ios cocoa-touch uiimageview grand-central-dispatch

我在这里有一段代码,用于在调度队列上加载图像:

dispatch_async(dispatch_get_global_queue(0, 0), ^
{
    CGImageRef x = self.asset.defaultRepresentation.fullScreenImage;

    dispatch_async(dispatch_get_main_queue(), ^
    {
        [[self imageView] setImage: [UIImage imageWithCGImage: x]];
    });
});

代码似乎工作了几次,直到我最终在此行[[self imageView] setImage: [UIImage imageWithCGImage: x]];获得了错误的访问权限。有人知道是什么原因引起的吗?

2 个答案:

答案 0 :(得分:1)

使用

CGImageRef x = CGImageCreateCopy(self.asset.defaultRepresentation.fullScreenImage);

CGImageRelease(x) 
设置

答案 1 :(得分:1)

尝试在自己的队列中释放CGImageRef,而不是将其从一个异步队列传递到另一个队列:

dispatch_async(dispatch_get_global_queue(0, 0), ^
{
    CGImageRef x = self.asset.defaultRepresentation.fullScreenImage;
    UIImage *img = [UIImage imageWithCGImage: x];
    CGImageRelease(x);

    dispatch_async(dispatch_get_main_queue(), ^
    {
        [[self imageView] setImage: img];
    });
});

如果这个简单的黑客行为不起作用,那么是时候启动仪器并查看实际泄漏的内容了。