亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

iOS多線程-05-多圖下載

2019-11-14 18:26:59
字體:
來源:轉載
供稿:網友

效果圖


常見問題及解決方法


  • 圖片重復下載

    • 將內存保存在內存或沙盒中。
  • 若下載的圖片量較大,則會出現UI界面不流暢的現象

    • 在子線程中執行下載操作,然后回到主線程成中進行UI界面的刷新。
  • 由于cell的循環利用造成的圖片顯示錯亂問題

    • 指定刷新表格的indexPath行。
  • subTitle類型的cell,無法顯示圖片

    • subtitle類型的cell中的imageView只有在第一次返回cell時設置圖片,否則圖片將不能顯示(刷新表格也不行)??梢酝ㄟ^設置占位圖片的方式來解決此問題。

思維導圖


具體實現


  • 其核心代碼主要在tableView的返回創建cell的代理方法中,所以以下主要對該方法的實現進行解析

  • 主要流程

    • 設置模型類,包含以下屬性

      /**圖片*/@PRoperty (nonatomic, strong) NSString *icon;/**名字*/@property (nonatomic, strong) NSString *name;/**下載量*/@property (nonatomic, strong) NSString *download;
    • 需要用到的成員屬性

      /**模型數組,用來存放每個cell的數據模型*/@property (nonatomic, strong) NSArray *apps;/**操作隊列,操作只有添加到隊列才有可能并發執行*/@property (nonatomic, strong) NSOperationQueue *queue;/**用于在內存中緩存圖片,部分避免圖片被多次下載*/@property (nonatomic, strong) NSMutableDictionary *imageCache;/**標記當前所有正在執行的操作,避免正在執行的操作被重復執行*/@property (nonatomic, strong) NSMutableDictionary *operations;
    • 創建cell的方法的核心代碼

      • 從內存緩存中取圖片

        //內存中緩存的圖片在imagCache數組中self.imageCache[app.icon]
      • 從沙盒中取圖片

        //獲取文件路徑NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];//獲取文件名NSString *filename = [app.icon lastPathComponent];//計算出全路徑NSString *file = [cachePath stringByAppendingPathComponent:filename];//加載沙盒中的數據NSData *data = [NSData dataWithContentsOfFile:file];//判斷data中若有數據,否則從網絡上下載數據if (data){//沙盒中有數據    UIImage *image = [UIImage imageWithData:data];    cell.imageView.image = image;    //存到字典中(即內存)    self.imageCache[app.icon] = cell.imageView.image;}
      • 從網絡上下載數據

        //若subTitle類型的cell要顯示圖片,必須在第一次放回cell時就顯示圖片(或占位圖片)cell.imageView.image = [UIImage imageNamed:@"1"];//取得操作隊列中的操作NSOperation *operation = self.operations[app.icon];if (operation == nil){//不存在該圖片的下載操作    //創建下載圖片操作    operation = [NSBlockOperation blockOperationWithBlock:^{        //通過url加載數據        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:app.icon]];        //數據加載失敗        if (data == nil)        {            //移除操作,以便刷新表格時能夠再次請求數據            [self.operations removeObjectForKey:app.icon];            return ;        }        //NSData轉換為UIImage        UIImage *image = [UIImage imageWithData:data];        //存放到字典中        self.imageCache[app.icon] = image;        //線程睡眠,模擬大數據下載        [NSThread sleepForTimeInterval:1];        //回主線程顯示圖片        [[NSOperationQueue mainQueue] addOperationWithBlock:^{            //通過indexPath刷新表格,此時內存緩存中已有圖片            [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];        }];        //將圖片寫入沙盒        [data writeToFile:file atomically:YES];        //移除操作,保證在刷新表格時可以重新下載沒有下載的圖片        [self.operations removeObjectForKey:app.icon];    }];    //將操作添加到隊列    [self.queue addOperation:operation];    //保證圖片不被重復下載    self.operations[app.icon] = operation;

通過第三方框架(SDWebImage)


  • SDWebImage可以大大簡化多圖下載任務
  • 通過擴展UIImageView的分類,在分類方法中實現多圖下載功能,只給外部使用者暴露一個簡單地網絡接口
  • 包含分類頭文件UIImageView+WebCache.h

  • 圖片下載功能的實現

    • 方法一

      - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder/**	 url:圖片的地址     placeholder:占位圖片*/
    • 方法二

      - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock/**	 progressBlock:下載過程中的回調Block,可以在該Block中計算下載進度	 completedBlock:下載完畢的回調方法*/

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品专区第二| 美女999久久久精品视频| 国外色69视频在线观看| 中文字幕日韩精品在线| 亚洲乱码一区二区| 精品成人久久av| 亚洲在线观看视频网站| 久久精品国产69国产精品亚洲| 91亚洲精华国产精华| 亚洲男女自偷自拍图片另类| 日韩成人av网| 国产精品1区2区在线观看| 国产精品视频永久免费播放| 色噜噜国产精品视频一区二区| 成人欧美一区二区三区黑人| 国产欧洲精品视频| 亚洲最大的av网站| 91精品国产色综合| 国产精品毛片a∨一区二区三区|国| 成人日韩av在线| 日韩欧美中文字幕在线观看| 日韩在线视频观看| 亚洲经典中文字幕| 久久亚洲精品成人| 欧美在线精品免播放器视频| 91精品视频免费| www.欧美视频| 欧美视频在线观看 亚洲欧| 成人淫片在线看| 日本久久久久久久久久久| 日韩经典一区二区三区| 亚洲精品动漫100p| 亚洲男人天堂九九视频| 一区二区日韩精品| 欧美性视频网站| 亚洲天堂男人的天堂| 亚洲少妇激情视频| 98精品国产自产在线观看| 日韩中文字幕视频| 丰满岳妇乱一区二区三区| 亚洲第一页在线| 日韩av免费在线看| 成人欧美在线视频| 91精品啪在线观看麻豆免费| 中文字幕日韩有码| 久久久精品国产| 欧美夫妻性生活xx| 中文字幕日本欧美| 国产精品免费福利| 91成人在线视频| 国产主播精品在线| 欧亚精品在线观看| 久久影视免费观看| 欧美日韩一区二区三区在线免费观看| 亚洲爱爱爱爱爱| 亚洲最大福利视频| 日韩av网站在线| 国产精品日韩欧美大师| 精品性高朝久久久久久久| 在线观看日韩视频| 久久免费精品视频| 欧美贵妇videos办公室| 亚洲成人亚洲激情| 91系列在线观看| 欧美另类老女人| 中文字幕亚洲一区在线观看| 668精品在线视频| 久久精品国产视频| 欧美日韩在线观看视频小说| 国产精品久久一区主播| 91精品视频在线免费观看| 日韩国产高清污视频在线观看| 精品国产一区二区三区久久狼5月| 色综合久久中文字幕综合网小说| 久久中文精品视频| 欧美成人中文字幕| 精品国内亚洲在观看18黄| 亚洲精品美女免费| 夜夜嗨av一区二区三区免费区| 国产成人极品视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 九九热这里只有精品6| 亚洲国产一区二区三区在线观看| 日韩有码片在线观看| 日本精品免费观看| 久久久久久欧美| 7777免费精品视频| 一本一本久久a久久精品综合小说| 久久久亚洲天堂| 97久久精品人人澡人人爽缅北| 亚洲成人999| 91成人性视频| 国产狼人综合免费视频| 亚洲欧美日韩另类| 亚洲精品美女免费| 91免费在线视频| 欧美激情视频一区二区| 日韩成人中文字幕在线观看| 亚洲精品理论电影| 欧美中文在线观看| 亚洲男人第一av网站| 国产手机视频精品| 色天天综合狠狠色| 久久久精品一区| 亚洲精品网址在线观看| 91国自产精品中文字幕亚洲| 国产色视频一区| 欧美成年人在线观看| 亚洲色图日韩av| 深夜福利91大全| 国产做受69高潮| 久久夜精品va视频免费观看| 久久久久国产精品一区| 一本一本久久a久久精品综合小说| 中文字幕一区二区精品| 国产精品视频久久久| 国产精品国产三级国产aⅴ9色| 日韩av不卡在线| 成人免费激情视频| 亚洲午夜精品久久久久久久久久久久| 亚洲欧美日韩天堂一区二区| 在线播放日韩欧美| 日韩成人激情视频| 欧美性猛交xxxxx水多| 成人天堂噜噜噜| 黑人欧美xxxx| 亚洲人成电影在线观看天堂色| 亚洲欧洲偷拍精品| 日韩专区中文字幕| 精品在线欧美视频| 久久91亚洲精品中文字幕| 亚洲片国产一区一级在线观看| 亚洲一二在线观看| 97精品国产91久久久久久| 日本不卡免费高清视频| 黄色91在线观看| 91成人在线观看国产| 亚洲人成亚洲人成在线观看| 欧美野外猛男的大粗鳮| 91网在线免费观看| 久久久久久国产| 欧美一级大胆视频| 在线成人免费网站| 国产精品久久一| 在线性视频日韩欧美| 国产精品一区av| 欧美老少配视频| 欧美做受高潮1| 日韩欧美黄色动漫| 欧美电影免费观看电视剧大全| 亚洲第一区第一页| 久久久久久中文字幕| 高清视频欧美一级| 国产成人精品日本亚洲| 国产99视频精品免视看7| 亚洲欧美日韩精品| 国产一区二区三区中文| 欧美性视频精品| 久久99国产综合精品女同| 亚洲欧美国产制服动漫| 国产精品视频久久久| 日韩麻豆第一页| 欧美裸体视频网站| 精品国产一区二区三区久久|