| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- //
- // LeslieImageCache.m
- // AsyncUIImageView
- //
- // Created by Leslie.Fang on 14-8-11.
- // Copyright (c) 2017年 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;
- }
- - (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);
- cacheDir = [[paths objectAtIndex:0] stringByAppendingPathComponent:IBOSSIMAGE];
- NSFileManager *fileManager = [NSFileManager defaultManager];
-
- BOOL isDir = NO;
-
- // fileExistsAtPath 判断一个文件或目录是否有效,isDirectory判断是否一个目录
- BOOL existed = [fileManager fileExistsAtPath:cacheDir isDirectory:&isDir];
-
- if ( !(isDir == YES && existed == YES) ) {
-
- // 在 Document 目录下创建一个 head 目录
- [fileManager createDirectoryAtPath:cacheDir withIntermediateDirectories:YES attributes:nil error:nil];
-
- }
- }
-
- return self;
- }
- +(LeslieImageCache*)sharedCacheMultiple {
- static LeslieImageCache *imageCache = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- imageCache = [[self alloc] init];
- });
-
- return imageCache;
- }
- - (void)cacheImageToMemory:(UIImage*)image forKey:(NSString*)key{
- if (image) {
- [memCache setObject:image forKey:key];
- }
- }
- -(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;
- }
- - (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*)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
|