有關(guān) SDWebImage 框架的一些細(xì)節(jié)

1. Q:SDWebImage 下載圖片的最大并發(fā)數(shù)量為多少?

A:6

  • SDWebImageDownloader.m文件中的init方法的下面一行代碼給了答案
_downloadQueue.maxConcurrentOperationCount = 6;
2. Q:SDWebImage 下載隊(duì)列的處理方式?

A:FIFO 的隊(duì)列處理方式(先進(jìn)先出)

  • 同樣也是在init方法中
_executionOrder = SDWebImageDownloaderFIFOExecutionOrder;
3. Q:SDWebImage 框架中的緩存文件名字是如何命名的?

A:通過(guò)圖片的 URL 地址,將地址進(jìn)行MD5加密,然后將加密得到的一串字符作為圖片的名字。

4. Q:SDWebImage 框架內(nèi)部是如何處理內(nèi)存警告的?

A:通過(guò)監(jiān)聽(tīng)通知的方式清理緩存

  • SDWebImageCache.m文件中的- dealloc方法注冊(cè)一個(gè)通知中心
- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil];

}

當(dāng)這個(gè)通知接受到內(nèi)存警告時(shí)會(huì)直接removeAllObjects

5. Q:SDWebImage 框架是如何判斷圖片類型的(GIF or PNG…)?

A:匹配圖片的第一個(gè)字節(jié)的二進(jìn)制碼,然后進(jìn)行圖片類型判斷

  • NSData+ImageContentType.m文件中
[data getBytes:&c length:1];
   switch (c) {
        case 0xFF:
            return @"image/jpeg";
        case 0x89:
            return @"image/png";
        case 0x47:
            return @"image/gif";
        case 0x49:
        case 0x4D:
            return @"image/tiff";
        case 0x52:
            // R as RIFF for WEBP
            if ([data length] < 12) {
                return nil;
            }

先將下載的圖片解碼,然后匹配該圖片第一個(gè)字節(jié)的二進(jìn)制碼,最后return該圖片的類型

6. Q:SDWebImage 框架是如何下載圖片的?

A:發(fā)送網(wǎng)絡(luò)請(qǐng)求下載圖片,主要是使用NSURLSession

  • SDWebImageDownloaderOperation.m文件中的- start方法創(chuàng)建了一個(gè)NSURLSession對(duì)象
self.ownedSession = [NSURLSession sessionWithConfiguration:sessionConfig
                                                     delegate:self
                                                delegateQueue:nil];

下載圖片主要是通過(guò)下面的一個(gè)代理方法(NSURLSessionDataDelegate)實(shí)現(xiàn)的,創(chuàng)建一個(gè)NSMutableData的對(duì)象將服務(wù)器請(qǐng)求到的數(shù)據(jù)一點(diǎn)一點(diǎn)拼接起來(lái)

self.imageData = [[NSMutableData alloc] initWithCapacity:expected];
self.response = response;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • iOS開(kāi)發(fā)系列--網(wǎng)絡(luò)開(kāi)發(fā) 概覽 大部分應(yīng)用程序都或多或少會(huì)牽扯到網(wǎng)絡(luò)開(kāi)發(fā),例如說(shuō)新浪微博、微信等,這些應(yīng)用本身可...
    lichengjin閱讀 4,058評(píng)論 2 7
  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,655評(píng)論 30 472
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,636評(píng)論 4 61
  • 第一篇第二篇大概是把下載圖片緩存圖片的這個(gè)邏輯走完了,里面涉及好多類。 羅列一下 UIView+WebCache ...
    充滿活力的早晨閱讀 854評(píng)論 0 1
  • 作者:了空居士蔡衍顓 編輯:虛空居士蔡衍文 關(guān)鍵詞:氣功 養(yǎng)生 健康 我的經(jīng)歷 本文共二十二篇,前十九篇是漸...
    虛空居士蔡衍文閱讀 5,923評(píng)論 0 21

友情鏈接更多精彩內(nèi)容