// // LeslieImageCache.m // AsyncUIImageView // // Created by Leslie.Fang on 14-8-11. // Copyright (c) 2014年 Enway. All rights reserved. // #import "LeslieImageCache.h" @implementation LeslieImageCache +(LeslieImageCache*)sharedCache { static LeslieImageCache *imageCache = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ imageCache = [[self alloc] init]; }); return imageCache; } +(LeslieImageCache*)sharedCacheMultiple { static LeslieImageCache *imageCache = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ imageCache = [[self alloc] initWithName:@""]; }); return imageCache; } -(id)initWithName:(NSString*)name{ if (self == [super init]) { ioQueue = dispatch_queue_create("com.leslie.LeslieImageCache", DISPATCH_QUEUE_SERIAL); memCache = [[NSCache alloc] init]; memCache.name = @"image_cache"; fileManager = [NSFileManager defaultManager]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docs = [paths objectAtIndex:0]; cacheDir = [[docs stringByAppendingPathComponent:@"ibossmini"]stringByAppendingPathComponent:@"salesOrder"]; NSFileManager *fileManager = [NSFileManager defaultManager]; BOOL isDir = NO; BOOL existed = [fileManager fileExistsAtPath:cacheDir isDirectory:&isDir]; if (!(isDir && existed)) { // 在Document目录下创建一个archiver目录 [fileManager createDirectoryAtPath:cacheDir withIntermediateDirectories:YES attributes:nil error:nil]; } } return self; } -(id)init{ if (self == [super init]) { ioQueue = dispatch_queue_create("com.leslie.LeslieImageCache", DISPATCH_QUEUE_SERIAL); memCache = [[NSCache alloc] init]; memCache.name = @"image_cache"; fileManager = [NSFileManager defaultManager]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docs = [paths objectAtIndex:0]; cacheDir = [docs stringByAppendingPathComponent:@"ibossmini"]; NSFileManager *fileManager = [NSFileManager defaultManager]; BOOL isDir = NO; BOOL existed = [fileManager fileExistsAtPath:cacheDir isDirectory:&isDir]; if (!(isDir && existed)) { // 在Document目录下创建一个archiver目录 [fileManager createDirectoryAtPath:cacheDir withIntermediateDirectories:YES attributes:nil error:nil]; } } return self; } -(void)cacheImageToMemory:(UIImage*)image forKey:(NSString*)key{ if (image) { [memCache setObject:image forKey:key]; } } -(UIImage*)getImageFromMemoryForkey:(NSString*)key{ return [memCache objectForKey:key]; } -(void)cacheImageToFile:(UIImage*)image forKey:(NSString*)key ofType:(NSString*)imageType{ if (!image || !key ||!imageType) { return; } dispatch_async(ioQueue, ^{ NSRange range = [key rangeOfString:@"/" options:NSBackwardsSearch]; NSString *filename = [key substringFromIndex:range.location+1]; NSString *filepath = [cacheDir stringByAppendingPathComponent:filename]; NSData *data = nil; if ([imageType isEqualToString:@"jpg"]) { data = UIImageJPEGRepresentation(image, 1.0); }else{ data = UIImagePNGRepresentation(image); } if (data) { [data writeToFile:filepath atomically:YES]; } }); } -(UIImage*)getImageFromFileForKey:(NSString*)key{ if (!key) { return nil; } NSRange range = [key rangeOfString:@"/" options:NSBackwardsSearch]; NSString *filename = [key substringFromIndex:range.location+1]; NSString *filepath = [cacheDir stringByAppendingPathComponent:filename]; if ([fileManager fileExistsAtPath:filepath]) { UIImage *image = [UIImage imageWithContentsOfFile:filepath]; return image; } return nil; } -(NSString*) getImageNameFromFileForKey:(NSString*)key{ if (!key) { return nil; } NSRange range = [key rangeOfString:@"/" options:NSBackwardsSearch]; NSString *filename = [key substringFromIndex:range.location+1]; NSString *filepath = [cacheDir stringByAppendingPathComponent:filename]; return filepath; } -(NSString*)getFilePathForImageName:(NSString*)imgName{ if (!imgName) { return nil; } NSString *filepath = [cacheDir stringByAppendingPathComponent:imgName]; if ([fileManager fileExistsAtPath:filepath]) { return filepath; } return nil; } -(NSString*)getImagePathFromFileForKey:(NSString*)key{ if (!key) { return nil; } NSRange range = [key rangeOfString:@"/" options:NSBackwardsSearch]; NSString *filename = [key substringFromIndex:range.location+1]; NSString *filepath = [cacheDir stringByAppendingPathComponent:filename]; if ([fileManager fileExistsAtPath:filepath]) { return filepath; } return nil; } -(NSString*)writeImageToFile:(UIImage*)image forKey:(NSString*)key ofType:(NSString*)imageType{ if (!image || !key ||!imageType) { return nil; } NSRange range = [key rangeOfString:@"/" options:NSBackwardsSearch]; NSString *filename = [key substringFromIndex:range.location+1]; NSString *filepath = [cacheDir stringByAppendingPathComponent:filename]; NSData *data = nil; if ([imageType isEqualToString:@"jpg"]) { data = UIImageJPEGRepresentation(image, 1.0); }else{ data = UIImagePNGRepresentation(image); } if (data) { [data writeToFile:filepath atomically:YES]; } return filepath; } @end