首页 > 代码库 > 源码0502-06-掌握-多图片下载
源码0502-06-掌握-多图片下载
// ViewController.m// 06-掌握-多图片下载#import "ViewController.h"#import "XMGApp.h"@interface ViewController ()/** 所有数据 */@property (nonatomic, strong) NSArray *apps;/** 内存缓存的图片 */@property (nonatomic, strong) NSMutableDictionary *imageCache;@end@implementation ViewController- (NSMutableDictionary *)imageCache{ if (!_imageCache) { _imageCache = [NSMutableDictionary dictionary]; } return _imageCache;}- (NSArray *)apps{ if (!_apps) { NSArray *dictArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"apps.plist" ofType:nil]]; NSMutableArray *appArray = [NSMutableArray array]; for (NSDictionary *dict in dictArray) { [appArray addObject:[XMGApp appWithDict:dict]]; } _apps = appArray; } return _apps;}- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.}#pragma mark - 数据源方法- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return self.apps.count;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *ID = @"app"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; XMGApp *app = self.apps[indexPath.row]; cell.textLabel.text = app.name; cell.detailTextLabel.text = app.download; // 先从内存缓存中取出图片 UIImage *image = self.imageCache[app.icon]; if (image) { // 内存中有图片 cell.imageView.image = image; } else { // 内存中没有图片 // 获得Library/Caches文件夹 NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; // 获得文件名 NSString *filename = [app.icon lastPathComponent]; // 计算出文件的全路径 NSString *file = [cachesPath stringByAppendingPathComponent:filename]; // 加载沙盒的文件数据 NSData *data =http://www.mamicode.com/ [NSData dataWithContentsOfFile:file]; if (data) { // 直接利用沙盒中图片 cell.imageView.image = [UIImage imageWithData:data]; // 存到字典中 self.imageCache[app.icon] = cell.imageView.image; } else { // 下载图片 data =http://www.mamicode.com/ [NSData dataWithContentsOfURL:[NSURL URLWithString:app.icon]]; cell.imageView.image = [UIImage imageWithData:data]; // 存到字典中 self.imageCache[app.icon] = cell.imageView.image; // 将图片文件数据写入沙盒中 [data writeToFile:file atomically:YES]; } } return cell;}// [NSDate date];// 获得文件属性// [[NSFileManager defaultManager] attributesOfItemAtPath:<#(NSString *)#> error:<#(NSError *__autoreleasing *)#>];// 删除文件// [[NSFileManager defaultManager] removeItemAtPath:<#(NSString *)#> error:<#(NSError *__autoreleasing *)#>];/* Documents Library - Caches - Preference tmp */@end
// XMGApp.h// 06-掌握-多图片下载#import <Foundation/Foundation.h>@interface XMGApp : NSObject/** 图标 */@property (nonatomic, strong) NSString *icon;/** 下载量 */@property (nonatomic, strong) NSString *download;/** 名字 */@property (nonatomic, strong) NSString *name;+ (instancetype)appWithDict:(NSDictionary *)dict;@end
// XMGApp.m// 06-掌握-多图片下载#import "XMGApp.h"@implementation XMGApp+ (instancetype)appWithDict:(NSDictionary *)dict{ XMGApp *app = [[self alloc] init]; [app setValuesForKeysWithDictionary:dict]; return app;}@end
// ViewController.m// 06-掌握-多图片下载#import "ViewController.h"#import "XMGApp.h"@interface ViewController ()/** 所有数据 */@property (nonatomic, strong) NSArray *apps;/** 内存缓存的图片 */@property (nonatomic, strong) NSMutableDictionary *images;/** 队列对象 */@property (nonatomic, strong) NSOperationQueue *queue;@end@implementation ViewController- (NSOperationQueue *)queue{ if (!_queue) { _queue = [[NSOperationQueue alloc] init]; _queue.maxConcurrentOperationCount = 3; } return _queue;}- (NSMutableDictionary *)images{ if (!_images) { _images = [NSMutableDictionary dictionary]; } return _images;}- (NSArray *)apps{ if (!_apps) { NSArray *dictArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"apps.plist" ofType:nil]]; NSMutableArray *appArray = [NSMutableArray array]; for (NSDictionary *dict in dictArray) { [appArray addObject:[XMGApp appWithDict:dict]]; } _apps = appArray; } return _apps;}- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.}#pragma mark - 数据源方法- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return self.apps.count;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *ID = @"app"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; XMGApp *app = self.apps[indexPath.row]; cell.textLabel.text = app.name; cell.detailTextLabel.text = app.download; // 先从内存缓存中取出图片 UIImage *image = self.images[app.icon]; if (image) { // 内存中有图片 cell.imageView.image = image; } else { // 内存中没有图片 // 获得Library/Caches文件夹 NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; // 获得文件名 NSString *filename = [app.icon lastPathComponent]; // 计算出文件的全路径 NSString *file = [cachesPath stringByAppendingPathComponent:filename]; // 加载沙盒的文件数据 NSData *data =http://www.mamicode.com/ [NSData dataWithContentsOfFile:file]; if (data) { // 直接利用沙盒中图片 UIImage *image = [UIImage imageWithData:data]; cell.imageView.image = image; // 存到字典中 self.images[app.icon] = image; } else { // 下载图片 [self.queue addOperationWithBlock:^{ // 下载图片 NSData *data =http://www.mamicode.com/ [NSData dataWithContentsOfURL:[NSURL URLWithString:app.icon]]; UIImage *image = [UIImage imageWithData:data]; [NSThread sleepForTimeInterval:1.0]; // 回到主线程显示图片 [[NSOperationQueue mainQueue] addOperationWithBlock:^{ cell.imageView.image = image; }]; // 存到字典中 self.images[app.icon] = image; // 将图片文件数据写入沙盒中 [data writeToFile:file atomically:YES]; }]; } } return cell;}// [NSDate date];// 获得文件属性// [[NSFileManager defaultManager] attributesOfItemAtPath:<#(NSString *)#> error:<#(NSError *__autoreleasing *)#>];// 删除文件// [[NSFileManager defaultManager] removeItemAtPath:<#(NSString *)#> error:<#(NSError *__autoreleasing *)#>];/* Documents Library - Caches - Preference tmp */@end
源码0502-06-掌握-多图片下载
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。