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

首頁 > 系統 > iOS > 正文

iOS多線程實現多圖下載功能

2020-07-26 02:29:18
字體:
來源:轉載
供稿:網友

本文實例為大家分享了iOS多線程實現多圖下載功能的具體代碼,供大家參考,具體內容如下

一.模型文件代碼如下

// XMGAPP.h  #import <Foundation/Foundation.h>  @interface XMGAPP : NSObject  /** APP的名稱 */ @property (nonatomic, strong) NSString *name; /** APP的圖片的url地址 */ @property (nonatomic, strong) NSString *icon; /** APP的下載量 */ @property (nonatomic, strong) NSString *download;  +(instancetype)appWithDict:(NSDictionary *)dict; @end 
// XMGAPP.m  #import "XMGAPP.h"  @implementation XMGAPP  +(instancetype)appWithDict:(NSDictionary *)dict {   XMGAPP *appM = [[XMGAPP alloc]init];   //KVC   [appM setValuesForKeysWithDictionary:dict];      return appM; } @end 

控制器.m代碼如下:

// ViewController.m  #import "ViewController.h" #import "XMGAPP.h"  @interface ViewController () /** tableView的數據源 */ @property (nonatomic, strong) NSArray *apps; /** 內存緩存 */ @property (nonatomic, strong) NSMutableDictionary *images; /** 隊列 */ @property (nonatomic, strong) NSOperationQueue *queue; /** 操作緩存 */ @property (nonatomic, strong) NSMutableDictionary *operations; @end  @implementation ViewController  #pragma mark ---------------------- #pragma mark lazy loading -(NSOperationQueue *)queue {   if (_queue == nil) {     _queue = [[NSOperationQueue alloc]init];     //設置最大并發數     _queue.maxConcurrentOperationCount = 5;   }   return _queue; } -(NSMutableDictionary *)images {   if (_images == nil) {     _images = [NSMutableDictionary dictionary];   }   return _images; } -(NSArray *)apps {   if (_apps == nil) {          //字典數組     NSArray *arrayM = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"apps.plist" ofType:nil]];          //字典數組---->模型數組     NSMutableArray *arrM = [NSMutableArray array];     for (NSDictionary *dict in arrayM) {       [arrM addObject:[XMGAPP appWithDict:dict]];     }     _apps = arrM;   }   return _apps; }  -(NSMutableDictionary *)operations {   if (_operations == nil) {     _operations = [NSMutableDictionary dictionary];   }   return _operations; }  #pragma mark ---------------------- #pragma mark UITableViewDatasource -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {   return 1; }  -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {   return self.apps.count; }  -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {   static NSString *ID = @"app";      //1.創建cell   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];      //2.設置cell的數據   //2.1 拿到該行cell對應的數據   XMGAPP *appM = self.apps[indexPath.row];      //2.2 設置標題   cell.textLabel.text = appM.name;      //2.3 設置子標題   cell.detailTextLabel.text = appM.download;      //2.4 設置圖標      //先去查看內存緩存中該圖片時候已經存在,如果存在那么久直接拿來用,否則去檢查磁盤緩存   //如果有磁盤緩存,那么保存一份到內存,設置圖片,否則就直接下載   //1)沒有下載過   //2)重新打開程序      UIImage *image = [self.images objectForKey:appM.icon];   if (image) {     cell.imageView.image = image;     NSLog(@"%zd處的圖片使用了內存緩存中的圖片",indexPath.row) ;   }else   {     //保存圖片到沙盒緩存     NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];     //獲得圖片的名稱,不能包含/     NSString *fileName = [appM.icon lastPathComponent];     //拼接圖片的全路徑     NSString *fullPath = [caches stringByAppendingPathComponent:fileName];               //檢查磁盤緩存     NSData *imageData = [NSData dataWithContentsOfFile:fullPath];     //廢除     imageData = nil;          if (imageData) {       UIImage *image = [UIImage imageWithData:imageData];       cell.imageView.image = image;              NSLog(@"%zd處的圖片使用了磁盤緩存中的圖片",indexPath.row) ;       //把圖片保存到內存緩存       [self.images setObject:image forKey:appM.icon];        //      NSLog(@"%@",fullPath);     }else     {       //檢查該圖片時候正在下載,如果是那么久什么都捕捉,否則再添加下載任務       NSBlockOperation *download = [self.operations objectForKey:appM.icon];       if (download) {                }else       {                  //先清空cell原來的圖片         cell.imageView.image = [UIImage imageNamed:@"Snip20160221_306"];                  download = [NSBlockOperation blockOperationWithBlock:^{           NSURL *url = [NSURL URLWithString:appM.icon];           NSData *imageData = [NSData dataWithContentsOfURL:url];           UIImage *image = [UIImage imageWithData:imageData];                       NSLog(@"%zd--下載---",indexPath.row);                      //容錯處理           if (image == nil) {             [self.operations removeObjectForKey:appM.icon];             return ;           }           //演示網速慢的情況           //[NSThread sleepForTimeInterval:3.0];                    //把圖片保存到內存緩存           [self.images setObject:image forKey:appM.icon];                      //NSLog(@"Download---%@",[NSThread currentThread]);           //線程間通信           [[NSOperationQueue mainQueue] addOperationWithBlock:^{                          //cell.imageView.image = image;             //刷新一行             [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];             //NSLog(@"UI---%@",[NSThread currentThread]);           }];                                 //寫數據到沙盒           [imageData writeToFile:fullPath atomically:YES];                      //移除圖片的下載操作           [self.operations removeObjectForKey:appM.icon];                    }];                  //添加操作到操作緩存中         [self.operations setObject:download forKey:appM.icon];                  //添加操作到隊列中         [self.queue addOperation:download];       }            }   }      //3.返回cell   return cell; }  -(void)didReceiveMemoryWarning {   [self.images removeAllObjects];      //取消隊列中所有的操作   [self.queue cancelAllOperations]; }  //1.UI很不流暢 --- > 開子線程下載圖片 //2.圖片重復下載 ---> 先把之前已經下載的圖片保存起來(字典) //內存緩存--->磁盤緩存  //3.圖片不會刷新--->刷新某行 //4.圖片重復下載(圖片下載需要時間,當圖片還未完全下載之前,又要重新顯示該圖片) //5.數據錯亂 ---設置占位圖片  /*  Documents:會備份,不允許  Libray   Preferences:偏好設置 保存賬號   caches:緩存文件  tmp:臨時路徑(隨時會被刪除)  */  @end 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文在线中文网在线观看| 亚洲成人网在线| 国产精品∨欧美精品v日韩精品| 亚洲无线码在线一区观看| 日韩免费观看av| 中文字幕精品久久久久| 91在线精品播放| 国产精品18久久久久久麻辣| 欧美日产国产成人免费图片| 久久免费视频在线观看| 精品人伦一区二区三区蜜桃网站| 国产亚洲成精品久久| 欧美乱大交做爰xxxⅹ性3| 黄色成人av在线| 国产精品视频一区二区高潮| 成人日韩av在线| 欧美日韩在线观看视频小说| 久久6精品影院| 久久久国产精品视频| 亚洲激情视频在线| 国产精品视频自在线| 97av视频在线| 欧美精品激情在线观看| 欧美精品免费在线观看| 国模私拍视频一区| 国产欧美一区二区白浆黑人| 国产亚洲日本欧美韩国| 欧美孕妇与黑人孕交| 国产成人一区二区三区小说| 欧美日本亚洲视频| 亚洲国产高清自拍| 亚洲欧美日韩久久久久久| 欧美精品xxx| 亚洲精品美女免费| 欧美精品在线播放| 不卡在线观看电视剧完整版| 国产美女91呻吟求| 欧美交受高潮1| 日韩精品视频在线播放| 亚洲欧美日韩中文在线制服| 91在线视频精品| 精品亚洲一区二区三区在线播放| 中文字幕av日韩| 国产精品成人久久久久| 亚洲精品国产suv| 国产精品美女视频网站| 亚洲人成77777在线观看网| 欧美日韩视频免费播放| 午夜免费久久久久| 日本伊人精品一区二区三区介绍| 成人综合国产精品| 欧美激情亚洲自拍| 久久夜色精品国产欧美乱| 国产精品成熟老女人| 亚洲日本中文字幕| 91精品国产一区| 中日韩美女免费视频网站在线观看| 国产一区二区三区18| 久久精品人人爽| 亚洲欧美制服另类日韩| 久久av红桃一区二区小说| 久久伊人色综合| 欧美一级电影在线| 亚洲成人久久久久| 亚洲午夜未删减在线观看| 国产精品高清免费在线观看| 国产狼人综合免费视频| 中文字幕在线视频日韩| 亚洲美女在线看| 亚洲美女性视频| 国产精品青青在线观看爽香蕉| 欧美中文在线字幕| 色小说视频一区| 中文字幕久热精品在线视频| 色狠狠av一区二区三区香蕉蜜桃| 黑人精品xxx一区| 国模精品系列视频| 亚洲精品成a人在线观看| 91精品国产99久久久久久| 欧美性色xo影院| 国内偷自视频区视频综合| 日韩电影网在线| 色偷偷91综合久久噜噜| 亚洲男女性事视频| 日韩av有码在线| 国产精品久久一区| 国语自产精品视频在线看一大j8| 精品性高朝久久久久久久| 俺去啦;欧美日韩| 亚洲自拍偷拍在线| 日本精品性网站在线观看| 国产精品爽黄69天堂a| 麻豆国产精品va在线观看不卡| 亚洲精品xxx| 成人网在线免费看| 中文综合在线观看| 欧美大胆a视频| 欧美另类极品videosbest最新版本| 日韩av在线电影网| 九九视频直播综合网| 国产精品爽爽ⅴa在线观看| 97在线日本国产| 欧美激情区在线播放| 国产精品美女久久| 欧美另类在线观看| 国产一区二区三区直播精品电影| 国产精品福利观看| 久久精品99国产精品酒店日本| 国产不卡一区二区在线播放| 91国产精品91| 91精品一区二区| 日韩一级裸体免费视频| 在线观看久久久久久| 91久久精品美女| 亚洲综合在线播放| 日韩av最新在线| 51午夜精品视频| 欧美巨乳美女视频| 亚洲有声小说3d| 北条麻妃一区二区在线观看| 午夜欧美大片免费观看| 69av在线视频| 热久久这里只有| 91最新在线免费观看| 色综久久综合桃花网| 久久久精品视频成人| 国产香蕉精品视频一区二区三区| 国产精品1234| 亚洲999一在线观看www| 国产中文欧美精品| 成人观看高清在线观看免费| 欧美成人免费观看| 成人高清视频观看www| 国产精品视频999| 国产精品久久电影观看| 久久影视电视剧免费网站| 国产激情999| 国产精品视频导航| 亚洲影院色在线观看免费| 自拍亚洲一区欧美另类| 亚洲伊人成综合成人网| 国产福利视频一区| 日韩av电影免费观看高清| 国产精品第8页| 国产专区欧美专区| 精品亚洲国产视频| 麻豆成人在线看| 色综合久久天天综线观看| 亚洲欧洲日产国码av系列天堂| 国产精品一区二区在线| 77777少妇光屁股久久一区| 欧美猛交ⅹxxx乱大交视频| 亚洲四色影视在线观看| 亚洲欧洲日韩国产| 国产成人一区三区| 欧美性猛交xxxx乱大交| 中文字幕国产精品| 亚洲性视频网址| 尤物精品国产第一福利三区| 91青草视频久久| 亚洲国产精品成人一区二区| 亚洲天堂av在线免费| 欧美夫妻性生活视频| 亚洲影院色在线观看免费|