我正在尝试使用以下内容从本地网址加载图片:
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:fileURL]];
[self.imageView setImage:image];
NSLog(@"imageView set");
所以我几乎立即在控制台“imageView set”中看到它,但它需要很长时间才能在UI中反映出来(有时几分钟!)。
知道为什么会这样吗?
答案 0 :(得分:10)
当我在后台线程(我正在下载图像文件)中设置图像时,这发生在我身上。只需确保您的代码在主线程中运行。图像会立即改变。
// In a background thread...
UIImage *image = ... // Build or download the image
dispatch_async(dispatch_get_main_queue(), ^{
[self.imageView setImage:image]; // Run in main thread (UI thread)
});
答案 1 :(得分:4)
您应该加载乐器,看看它到底在做什么。
对于初学者,你应该尽力避免绘图线程上的I / O.此外,是否还有其他I / O请求?
UIImage
不一定需要是单个位图表示 - 它可能由缓存支持和/或懒惰加载。因此,仅仅因为'图像'是'设置',并不意味着最佳位图已经加载到内存中并准备好渲染 - 它可能会被延迟直到请求渲染(绘制)。
分析OTOH会(通常)告诉你为什么花费的时间超过预期。
答案 2 :(得分:-1)
从NSData加载图像需要更多时间。 相反,您只需使用以下代码:
UIImage *image = [UIImage imageWithContentsOfFile:fileURL];
试试吧。
答案 3 :(得分:-2)
所以我尝试了以下内容:
dispatch_async(dispatch_get_global_queue(0, 0), ^{
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:fileURL]];
[self.imageView setImage:image];
NSLog(@"imageView set");
});
而且速度要快得多。不知道为什么会这样。