LeslieImageCache.m 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. //
  2. // LeslieImageCache.m
  3. // AsyncUIImageView
  4. //
  5. // Created by Leslie.Fang on 14-8-11.
  6. // Copyright (c) 2014年 Enway. All rights reserved.
  7. //
  8. #import "LeslieImageCache.h"
  9. @implementation LeslieImageCache
  10. +(LeslieImageCache*)sharedCache {
  11. static LeslieImageCache *imageCache = nil;
  12. static dispatch_once_t onceToken;
  13. dispatch_once(&onceToken, ^{
  14. imageCache = [[self alloc] init];
  15. });
  16. return imageCache;
  17. }
  18. +(LeslieImageCache*)sharedCacheMultiple {
  19. static LeslieImageCache *imageCache = nil;
  20. static dispatch_once_t onceToken;
  21. dispatch_once(&onceToken, ^{
  22. imageCache = [[self alloc] initWithName:@""];
  23. });
  24. return imageCache;
  25. }
  26. -(id)initWithName:(NSString*)name{
  27. if (self == [super init]) {
  28. ioQueue = dispatch_queue_create("com.leslie.LeslieImageCache", DISPATCH_QUEUE_SERIAL);
  29. memCache = [[NSCache alloc] init];
  30. memCache.name = @"image_cache";
  31. fileManager = [NSFileManager defaultManager];
  32. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  33. NSString *docs = [paths objectAtIndex:0];
  34. cacheDir = [[docs stringByAppendingPathComponent:@"ibossmini"]stringByAppendingPathComponent:@"salesOrder"];
  35. NSFileManager *fileManager = [NSFileManager defaultManager];
  36. BOOL isDir = NO;
  37. BOOL existed = [fileManager fileExistsAtPath:cacheDir isDirectory:&isDir];
  38. if (!(isDir && existed)) {
  39. // 在Document目录下创建一个archiver目录
  40. [fileManager createDirectoryAtPath:cacheDir withIntermediateDirectories:YES attributes:nil error:nil];
  41. }
  42. }
  43. return self;
  44. }
  45. -(id)init{
  46. if (self == [super init]) {
  47. ioQueue = dispatch_queue_create("com.leslie.LeslieImageCache", DISPATCH_QUEUE_SERIAL);
  48. memCache = [[NSCache alloc] init];
  49. memCache.name = @"image_cache";
  50. fileManager = [NSFileManager defaultManager];
  51. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  52. NSString *docs = [paths objectAtIndex:0];
  53. cacheDir = [docs stringByAppendingPathComponent:@"ibossmini"];
  54. NSFileManager *fileManager = [NSFileManager defaultManager];
  55. BOOL isDir = NO;
  56. BOOL existed = [fileManager fileExistsAtPath:cacheDir isDirectory:&isDir];
  57. if (!(isDir && existed)) {
  58. // 在Document目录下创建一个archiver目录
  59. [fileManager createDirectoryAtPath:cacheDir withIntermediateDirectories:YES attributes:nil error:nil];
  60. }
  61. }
  62. return self;
  63. }
  64. -(void)cacheImageToMemory:(UIImage*)image forKey:(NSString*)key{
  65. if (image) {
  66. [memCache setObject:image forKey:key];
  67. }
  68. }
  69. -(UIImage*)getImageFromMemoryForkey:(NSString*)key{
  70. return [memCache objectForKey:key];
  71. }
  72. -(void)cacheImageToFile:(UIImage*)image forKey:(NSString*)key ofType:(NSString*)imageType{
  73. if (!image || !key ||!imageType) {
  74. return;
  75. }
  76. dispatch_async(ioQueue, ^{
  77. NSRange range = [key rangeOfString:@"/" options:NSBackwardsSearch];
  78. NSString *filename = [key substringFromIndex:range.location+1];
  79. NSString *filepath = [cacheDir stringByAppendingPathComponent:filename];
  80. NSData *data = nil;
  81. if ([imageType isEqualToString:@"jpg"]) {
  82. data = UIImageJPEGRepresentation(image, 1.0);
  83. }else{
  84. data = UIImagePNGRepresentation(image);
  85. }
  86. if (data) {
  87. [data writeToFile:filepath atomically:YES];
  88. }
  89. });
  90. }
  91. -(UIImage*)getImageFromFileForKey:(NSString*)key{
  92. if (!key) {
  93. return nil;
  94. }
  95. NSRange range = [key rangeOfString:@"/" options:NSBackwardsSearch];
  96. NSString *filename = [key substringFromIndex:range.location+1];
  97. NSString *filepath = [cacheDir stringByAppendingPathComponent:filename];
  98. if ([fileManager fileExistsAtPath:filepath]) {
  99. UIImage *image = [UIImage imageWithContentsOfFile:filepath];
  100. return image;
  101. }
  102. return nil;
  103. }
  104. -(NSString*) getImageNameFromFileForKey:(NSString*)key{
  105. if (!key) {
  106. return nil;
  107. }
  108. NSRange range = [key rangeOfString:@"/" options:NSBackwardsSearch];
  109. NSString *filename = [key substringFromIndex:range.location+1];
  110. NSString *filepath = [cacheDir stringByAppendingPathComponent:filename];
  111. return filepath;
  112. }
  113. -(NSString*)getFilePathForImageName:(NSString*)imgName{
  114. if (!imgName) {
  115. return nil;
  116. }
  117. NSString *filepath = [cacheDir stringByAppendingPathComponent:imgName];
  118. if ([fileManager fileExistsAtPath:filepath]) {
  119. return filepath;
  120. }
  121. return nil;
  122. }
  123. -(NSString*)getImagePathFromFileForKey:(NSString*)key{
  124. if (!key) {
  125. return nil;
  126. }
  127. NSRange range = [key rangeOfString:@"/" options:NSBackwardsSearch];
  128. NSString *filename = [key substringFromIndex:range.location+1];
  129. NSString *filepath = [cacheDir stringByAppendingPathComponent:filename];
  130. if ([fileManager fileExistsAtPath:filepath]) {
  131. return filepath;
  132. }
  133. return nil;
  134. }
  135. -(NSString*)writeImageToFile:(UIImage*)image forKey:(NSString*)key ofType:(NSString*)imageType{
  136. if (!image || !key ||!imageType) {
  137. return nil;
  138. }
  139. NSRange range = [key rangeOfString:@"/" options:NSBackwardsSearch];
  140. NSString *filename = [key substringFromIndex:range.location+1];
  141. NSString *filepath = [cacheDir stringByAppendingPathComponent:filename];
  142. NSData *data = nil;
  143. if ([imageType isEqualToString:@"jpg"]) {
  144. data = UIImageJPEGRepresentation(image, 1.0);
  145. }else{
  146. data = UIImagePNGRepresentation(image);
  147. }
  148. if (data) {
  149. [data writeToFile:filepath atomically:YES];
  150. }
  151. return filepath;
  152. }
  153. @end