我在这里有一段代码,用于在调度队列上加载图像:
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]];
获得了错误的访问权限。有人知道是什么原因引起的吗?
答案 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];
});
});
如果这个简单的黑客行为不起作用,那么是时候启动仪器并查看实际泄漏的内容了。