簡體   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