//
//? UIImageView+CacheURL.m
//? Vodka
//
//? Created by xiaoming on 15/11/5.
//? Copyright ? 2015年 Beijing Beast Technology Co.,Ltd. All rights reserved.
//
?
#import "UIImageView+CacheURL.h"
#import "CodeFragments.h"
?
@implementation UIImageView (CacheURL)
?
#pragma mark - 传人urlString 和默认图。获取网络图片。----不放到缓存里面
-(void)setURLString:(NSString *)urlString placeholderImage:(UIImage *)image{
? ? [selfsetURLString:urlString placeholderImage:image relativePath:nil];
}
?
#pragma mark - 传人urlString 和默认图。获取网络图片。----不放到缓存里面 relativePath 传 nil @"" 跟上面的方法一样,都是 tempCache 路径下。
-(void)setURLString:(NSString *)urlString placeholderImage:(UIImage *)defaultImage relativePath:(NSString *)relativePath{
? ? if (relativePath == nil || [relativePath isEqualToString:@""]) {
? ? ? ? relativePath = @"tempCache";
? ? }
? ? self.image = defaultImage;
? ? if ([self isEmptyString:urlString]) {
? ? ? ? return;
? ? }
? ? dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
? ? ? ? UIImage *resultImage = nil;///从网上获取成功后的image
? ? ? ? //从缓存中读取。
? ? ? ? resultImage = [UIImage imageWithContentsOfFile:[self absolutePath:relativePath urlString:urlString systemPath:nil]];
? ? ? ? if (resultImage) {
? ? ? ? ? ? dispatch_async(dispatch_get_main_queue(), ^{
? ? ? ? ? ? ? ? self.image = resultImage;
? ? ? ? ? ? });
? ? ? ? ? ? return;
? ? ? ? }
? ? ? ? ///没有缓存的情况下。
? ? ? ? NSURL *url = [NSURL URLWithString:urlString];
? ? ? ? NSData *resultData = [NSData dataWithContentsOfURL:url];
? ? ? ? resultImage = [UIImage imageWithData:resultData];
? ? ? ? if (resultImage) {
? ? ? ? ? ? ///缓存data数据。
? ? ? ? ? ? NSString *aFileName = [self absolutePath:relativePath urlString:nil systemPath:nil];
? ? ? ? ? ? NSFileManager *fileManager = [NSFileManager defaultManager];
? ? ? ? ? ? if (![fileManager fileExistsAtPath:aFileName]) {
? ? ? ? ? ? ? ? ////withIntermediateDirectories? YES 表示可以创建多级目录。
? ? ? ? ? ? ? ? if (![fileManager createDirectoryAtPath:aFileName withIntermediateDirectories:YESattributes:nilerror:nil]) {
? ? ? ? ? ? ? ? ? ? NSLog(@"createFile error occurred");
? ? ? ? ? ? ? ? }
?? ? ? ? ? ? ? ?
? ? ? ? ? ? }
? ? ? ? ? ? NSString *resultFileString = [self absolutePath:relativePath urlString:urlString systemPath:nil];
? ? ? ? ? ? if ([resultData writeToFile:resultFileString atomically:YES]) {
? ? ? ? ? ? ? ? NSLog(@"保存成功");
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? NSLog(@"保存失败");
? ? ? ? ? ? }
? ? ? ? ? ? dispatch_async(dispatch_get_main_queue(), ^{
? ? ? ? ? ? ? ? self.image = resultImage;
? ? ? ? ? ? });
? ? ? ? }
? ? });
}
?
#pragma mark - 判断是否是空字符串
- (BOOL)isEmptyString:(NSString *)string{
? ? if(string == nil){
? ? ? ? return YES;
? ? }
? ? if([string isKindOfClass:[[NSNull null] class]]){
? ? ? ? return YES;
? ? }
? ? if([string isEqualToString:@""]){
? ? ? ? return YES;
? ? }
? ? if([string isEqualToString:@"<null>"])
? ? ? ? return YES;
? ? if([string isEqualToString:@"(null)"])
? ? ? ? return YES;
? ? returnNO;
}
?
#pragma mark - 从本地文件读取数据。
-(NSString *)absolutePath:(NSString*)relativePath urlString:(NSString *)urlString systemPath:(NSString *)systemPath{
? ? if (relativePath == nil || [relativePath isEqualToString:@""]) {
? ? ? ? relativePath = @"tempCache";
? ? }
? ? NSString *path0 = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
? ? NSString *path1 = [path0 stringByAppendingPathComponent:relativePath];
? ? if(urlString && ![urlString isEqualToString:@""]){///创建路径的时候不需要url,读,取的时候,需要url。
? ? ? ? NSString *path2 = [path1 stringByAppendingPathComponent:[urlString stringByReplacingOccurrencesOfString:@"/"withString:@"_"]];
? ? ? ? return path2;
? ? }
? ? return path1;
}
?
#pragma mark - 清除本地缓存
-(void)cleanDisk{
? ? NSFileManager *fileManager = [NSFileManagerdefaultManager];
? ? NSString *path0 = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
? ? NSString *defaultPath = [NSString stringWithFormat:@"%@/tempCache",path0];
? ? NSLog(@"defaultPaht ==== %@",defaultPath);
? ? [self folderSizeAtPath:defaultPath];
? ? if ([fileManager removeItemAtPath:defaultPath error:nil]) {
? ? ? ? NSLog(@"删除成功");
? ? }else{
? ? ? ? NSLog(@"删除失败");
? ? }
?? ?
? ? [self folderSizeAtPath:defaultPath];
}
?
#pragma mark - 通常用于删除缓存的时,计算缓存大小
//单个文件的大小
- (long long) fileSizeAtPath:(NSString*) filePath{
? ? NSFileManager* manager = [NSFileManagerdefaultManager];
? ? if ([manager fileExistsAtPath:filePath]){
? ? ? ? return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];
? ? }
? ? return 0;
}
#pragma mark - 遍历文件夹获得文件夹大小,返回多少M
- (float ) folderSizeAtPath:(NSString*) folderPath{
? ? if (!folderPath || [folderPath isEqualToString:@""]) {
? ? ? ? NSString *path0 = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
? ? ? ? folderPath = [NSString stringWithFormat:@"%@/tempCache",path0];
? ? }
? ? NSFileManager* manager = [NSFileManagerdefaultManager];
? ? if (![manager fileExistsAtPath:folderPath])
? ? {
? ? ? ? NSLog(@"大小为0");
? ? ? ? return 0;
? ? }
? ? NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:folderPath] objectEnumerator];
? ? NSString* fileName;
? ? long long folderSize = 0;
? ? while ((fileName = [childFilesEnumerator nextObject]) != nil){
? ? ? ? NSString* fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName];
? ? ? ? folderSize += [self fileSizeAtPath:fileAbsolutePath];
? ? }
? ? NSLog(@"文件大小====%f M ",folderSize/(1024.0*1024.0));
? ? return folderSize/(1024.0*1024.0);
}
?
@end
?
原文:http://zhangmingwei.iteye.com/blog/2254863