本文共 6456 字,大约阅读时间需要 21 分钟。
1. AFNETWorking
在AFNETWorking中,并没有提供现成的缓存方案,我们可以通过写文件的方式,自行做缓存。
在下载方法中:
1 2 3 4 5 6 7 | [manager GET:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { //写缓存 NSString *cachePath = @ "你的缓存路径" ; // /Library/Caches/MyCache [data writeToFile:cachePath atomically:YES]; succsee(data); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { }]; |
然后在每次下载前,进行如下判断:
1 2 3 4 5 | NSString * cachePath = @ "你的缓存路径" ; if ([[NSFileManager defaultManager] fileExistsAtPath:cachePath]) { //从本地读缓存文件 NSData *data = [NSData dataWithContentsOfFile:cachePath]; } |
有时,我们的下载请求可能是用户的动作触发的,比如一个按钮。我们还应该做一个保护机制的处理,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | //初始化一个下载请求数组 NSArray * requestArray=[[NSMutableArray alloc]init]; //每次开始下载任务前做如下判断 for (NSString * request in requestArray) { if ([url isEqualToString:request]) { return ; } } [requestArray addObject:url]; //下载成功或失败后 [manager GET:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { [requestArray removeObject:url] } failure:^(AFHTTPRequestOperation *operation, NSError *error) { [requestArray removeObject:url] }]; |
2. ASIHttpRequest
http://blog.sina.com.cn/s/blog_b638dc8901019zcd.html
3. SDWebImage
http://www.cocoachina.com/ios/20141212/10622.html
使用最新版的SDWebImage,默认就是磁盘缓存:
@implementation UIImageView (WebCache)- (void)sd_setImageWithURL:(NSURL *)url { [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil];}- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder { [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil];}- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil];}- (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock { [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:completedBlock];}- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock { [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:completedBlock];}- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock { [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:completedBlock];}- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {如果不想用磁盘缓存,那么使用SDWebImageOptions-->SDWebImageCacheMemoryOnly:
//失败后重试 SDWebImageRetryFailed = 1 << 0, //UI交互期间开始下载,导致延迟下载比如UIScrollView减速。 SDWebImageLowPriority = 1 << 1, //只进行内存缓存 SDWebImageCacheMemoryOnly = 1 << 2, //这个标志可以渐进式下载,显示的图像是逐步在下载 SDWebImageProgressiveDownload = 1 << 3, //刷新缓存 SDWebImageRefreshCached = 1 << 4, //后台下载 SDWebImageContinueInBackground = 1 << 5, //NSMutableURLRequest.HTTPShouldHandleCookies = YES; SDWebImageHandleCookies = 1 << 6, //允许使用无效的SSL证书 //SDWebImageAllowInvalidSSLCertificates = 1 << 7, //优先下载 SDWebImageHighPriority = 1 << 8, //延迟占位符 SDWebImageDelayPlaceholder = 1 << 9, //改变动画形象 SDWebImageTransformAnimatedImage = 1 << 10,
转载地址:http://byqrj.baihongyu.com/