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

首頁 > 系統 > iOS > 正文

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

2019-10-21 18:41:28
字體:
來源:轉載
供稿:網友

本文實例為大家分享了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 

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


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久免费视频观看| 日本精品一区二区三区在线播放视频| 欧美日韩国产一区中文午夜| 久久久女女女女999久久| 亚洲国产精品va在线| 激情久久av一区av二区av三区| 国产亚洲a∨片在线观看| 日韩资源在线观看| 亚洲午夜国产成人av电影男同| 69av视频在线播放| 青青久久av北条麻妃黑人| 热久久免费视频精品| 国产精品久久久久久久久久久新郎| 亚洲成人aaa| 欧美丝袜一区二区三区| 欧美一级大片视频| 国产精品爱久久久久久久| 久久久久久久久中文字幕| 亚洲人线精品午夜| 日韩成人av在线| 欧美午夜久久久| 九九久久精品一区| 色综合久久久久久中文网| 国产精品 欧美在线| 午夜欧美不卡精品aaaaa| 亚洲色图35p| 92看片淫黄大片看国产片| 精品少妇v888av| 亚洲欧美资源在线| 亚洲成人性视频| 亚洲电影免费观看高清完整版在线| 日韩中文字幕在线免费观看| 欧美国产日韩精品| 97精品视频在线观看| 国产精品久久久久免费a∨大胸| 亚洲男女自偷自拍图片另类| 福利二区91精品bt7086| 亚洲成avwww人| 欧美在线激情网| 亚洲综合小说区| 国产精品999999| 亚洲最大福利网站| 91高潮在线观看| 国产69精品99久久久久久宅男| 欧美日韩在线影院| 日韩av电影在线免费播放| 亚洲国产黄色片| www.色综合| 国产精品一区二区女厕厕| 亚洲欧美日韩在线高清直播| 亚洲欧美日韩精品久久亚洲区| 中文字幕亚洲天堂| 亚洲国产精久久久久久| 伊人男人综合视频网| 国产精品久久久久久超碰| 成人黄色大片在线免费观看| 欧美一级大片在线观看| 欧美自拍视频在线| 亚洲美女av在线播放| 国产精品普通话| 久久久999精品| 亚洲高清一区二| 国产美女被下药99| 国产成人精品电影| 国产精品久久久久7777婷婷| 成人xvideos免费视频| 午夜精品福利视频| 2019中文字幕在线| 成人午夜在线观看| 国产亚洲日本欧美韩国| 色噜噜狠狠狠综合曰曰曰| 国产成+人+综合+亚洲欧美丁香花| 91日本在线观看| 日韩av在线精品| 国产精品精品一区二区三区午夜版| 国产精品久久久久久亚洲调教| 亚洲天堂av图片| 一本一本久久a久久精品牛牛影视| 亚洲综合第一页| 欧美裸体xxxx极品少妇| 激情懂色av一区av二区av| 欧美大成色www永久网站婷| 成人黄色免费看| 国内精品久久久久影院 日本资源| 91成人天堂久久成人| 91精品国产一区| 国产中文字幕亚洲| 日韩高清有码在线| 欧美电影第一页| 日韩精品电影网| 日韩hd视频在线观看| 欧美精品免费播放| 午夜精品一区二区三区在线视频| 91在线免费视频| 91黄色8090| 欧美精品激情blacked18| 国产免费一区视频观看免费| 日韩免费视频在线观看| 精品毛片三在线观看| 亚洲欧美福利视频| 亚洲人高潮女人毛茸茸| 久久亚洲精品成人| 国产精品三级久久久久久电影| 日韩高清人体午夜| 成人福利网站在线观看| 在线观看亚洲视频| 成人激情在线观看| 国产精品白丝jk喷水视频一区| 91精品美女在线| 国产精品扒开腿做爽爽爽男男| 国产91精品久久久久| 久久91精品国产91久久跳| 亚洲精品国产综合久久| 亚洲性视频网站| 91禁外国网站| 国自在线精品视频| 91免费国产视频| 97在线视频一区| 操日韩av在线电影| 国产精品视频精品视频| 日韩电影在线观看中文字幕| 在线看片第一页欧美| 日韩精品在线视频| 中文日韩在线视频| 久久久久成人网| 中文字幕少妇一区二区三区| 亚洲天堂av在线免费观看| 亚洲色图综合网| 久色乳综合思思在线视频| 亚洲性夜色噜噜噜7777| 国产精品视频一区二区三区四| 国产日韩一区在线| 国产亚洲欧美日韩一区二区| 色噜噜国产精品视频一区二区| 欧洲成人在线观看| 色伦专区97中文字幕| 亚洲最大福利视频网站| 久久97久久97精品免视看| 欧美亚洲国产日韩2020| 国产成人av网址| 亚洲欧美精品在线| 欧美久久精品午夜青青大伊人| 欧美资源在线观看| 91欧美精品午夜性色福利在线| 亚洲欧洲日本专区| 国产日韩欧美夫妻视频在线观看| 国产有码在线一区二区视频| 久久成人一区二区| 一区二区三区动漫| 91九色在线视频| 欧美午夜宅男影院在线观看| 欧美性xxxx极品高清hd直播| www.久久色.com| 91久久中文字幕| 成人做爰www免费看视频网站| 久久精品99久久久香蕉| 国产偷国产偷亚洲清高网站| 亚洲最大av在线| 国产婷婷成人久久av免费高清| 97国产一区二区精品久久呦| 精品少妇v888av| 亚洲国产精品推荐| www日韩欧美| 日韩经典一区二区三区|