![](/img/trans.png)
[英]SDWebImage ,setImageWithUrl can't show the image on the imageView
[英]sdwebimage: is there a limit on how many setimageWithUrl can be queued?
我想知道一次可以提交多少個 setImageWithUrl 消息是否有上限?我正在嘗試加載 30 張照片,其中 10 張已成功下載,但在嘗試調試問題時在 requestFailed 中輸入了其他消息
任何提示或澄清? 謝謝
對於那些來這里尋求關於SDWebImage中最大並發下載次數的答案的人,我想補充上一個答案。
我不建議更改SDWebImageDownloader的init,因為您可能想要更新SDWebImage,或者像我一樣,調整應用程序不同區域的並發下載次數。
//thumbnails.m
//Loading thumbnails. It is faster to load them concurrently
SDWebImageManager.sharedManager.imageDownloader.maxConcurrentDownloads = 10;
[yourImageView setImageWithURL:thumbURL];
//fullScreen.m
//Loading big images in full-screen view,
SDWebImageManager *sharedManager = [SDWebImageManager sharedManager];
[sharedManager.imageDownloader setMaxConcurrentDownloads:1];
[sharedManager cancelAll]; //cancel all current queue
[yourImageView setImageWithURL:URL];
雖然您的問題是由於您提到的網址不正確,但我正在為其他尋求答案的人回答這個問題:
可以通過在SDWebImageDownloader的init中設置變量downloadQueue.maxConcurrentOperationCount,在最新版本的SDWebImage框架中設置最大並發下載次數。 這將限制應用程序中“downloadwithURL”調用的最大並發下載次數。 該框架將在隊列中放置任何其他操作,並在當前正在執行的下載完成時執行它們。
我通過設置這個值找到了一個奇怪的問題。 基於apple doc,此值應僅影響並發下載圖像編號,而不影響總下載圖像編號。 但是,如果是我的情況,如果將此值設置為2,我只能下載2個圖像,即使我將下載函數調用為2以上。此值似乎設置了downloadQueue大小的大小,而不是currentOperation數。 任何人都有同樣的問題?
maxConcurrentOperationCount
的NSOperationQueue
在 iPhone 平台上只能設置為 1 或 6。maxConcurrentOperationCount
的NSOperationQueue
設置為 6 ? 當可以同時調用多個任務時, maxConcurrentOperationCount
的NSOperationQueue
應該設置為6,比如可以同時下載多張圖片。
為什么特別是 6 而不是 10 或 100?
在名為SDWebImage
的框架中,我們可以看到源碼如下:
- (instancetype)init {
self = [super init];
if (self) {
_maxConcurrentDownloads = 6;
_downloadTimeout = 15.0;
_executionOrder = SDWebImageDownloaderFIFOExecutionOrder;
_acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)];
}
return self;
}
這段代碼表示默認值為6。 SDWebImage 參考 SDWebImageDownloaderConfig 類參考
maxConcurrentDownloads
的含義與maxConcurrentOperationCount
( Apple-Docs-NSOperationQueue-maxConcurrentOperationCount ) 相同
為什么特別是 6 而不是 10 或 100?
從 iPhone 到 iPhone 13 /13 Pro/13 Pro Max,iOS 平台上的最大處理器核心數為 6。
蘋果手機 | 首次發布 | 系統開啟 | 處理器核心數 |
---|---|---|---|
蘋果手機 | 2007年 | S (三星 S5L8900) | 1核 |
iPhone 3G | 2008年 | S (三星 S5L8900) | 1核 |
iPhone 3GS | 2009年 | S(三星 S5PC100 | 1核 |
iPhone 4 | 2010年 | A4 | 1核 |
iPhone 4S | 2011年 | A5 | 2核 |
iphone 5 | 2012年 | A6 | 2核 |
iPhone 5S | 2013年 | A7 | 2核 |
iPhone 6/6 加 | 2014年 | A8 | 2核 |
iPhone 6s/6s plus/SE | 2015年 | A9 | 2核 |
iPhone 7/plus | 2016年 | A9 | 4 芯(使用 2 芯) |
iPhone 8/plus/X | 2017年 | A11 | 6 個內核 = 2 個高功率 Monsoon 內核 + 4 個低功率 Mistral 內核 |
iPhone XS/XS MAX/XR | 2018年 | A12 | 6 個內核 = 2 個高功率 Vortex 內核 + 4 個低功率 Tempest 內核 |
iPhone 11 /11 Pro/11 Pro Max | 2019年 | A13 | 6 個內核 = 2 個性能 + 4 個效率內核 |
iPhone 12 /12 Pro/12 Pro Max | 2020年 | A14 | 6 個內核 = 2 個性能 + 4 個效率內核 |
iPhone 13 /13 Pro/13 Pro Max | 2021年 | A15 | 6 個內核 = 2 個性能 + 4 個效率內核 |
我們可以使用如下代碼打印處理器內核數:
NSUInteger cpuCoresCount = [[NSProcessInfo processInfo] processorCount];
文檔: Apple-Docs-NSProcessInfo-processorCount
將_maxConcurrentDownloads
設置為iPhone 平台上的CPU 核數是合理的。
maxConcurrentOperationCount
的NSOperationQueue
設置為 1 ? 他們將maxConcurrentOperationCount
設置為 1 意味着只能同時調用一個任務。
當只能同時調用一個任務時, maxConcurrentOperationCount
應設置為1。例如,只能同時對一張GIF圖片進行動畫處理,只能同時播放一個視頻。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.