繁体   English   中英

UIImage setImage非常非常慢

[英]UIImage setImage is very, very slow

我正在尝试使用以下方法从本地URL加载图像:

UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:fileURL]];
[self.imageView setImage:image];
NSLog(@"imageView set");

所以我几乎立即在控制台“imageView set”中看到它,但它需要很长时间才能在UI中反映出来(有时几分钟!)。

知道为什么会这样吗?

当我在后台线程(我正在下载图像文件)中设置图像时,这发生在我身上。 只需确保您的代码在主线程中运行。 图像会立即改变。

// 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)
});

你应该加载仪器,看看它到底在做什么。

对于初学者,您应该尽力避免绘图线程上的I / O. 此外,是否还有其他I / O请求?

UIImage不一定需要是单个位图表示 - 它可能由缓存支持和/或懒惰加载。 因此,仅仅因为'图像'是'设置',并不意味着最佳位图已经加载到内存中并准备好渲染 - 它可能会延迟到请求渲染(绘图)。

分析OTOH将(通常)告诉您为什么花费的时间超过预期。

从NSData加载图像需要更多时间。 相反,您只需使用以下代码:

UIImage *image = [UIImage imageWithContentsOfFile:fileURL];

试试吧。

所以我尝试了以下方法:

dispatch_async(dispatch_get_global_queue(0, 0), ^{
    UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:fileURL]];
    [self.imageView setImage:image];
    NSLog(@"imageView set");
});

而且速度要快得多。 不知道为什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM