AFNetworking 图片的本地缓存问题

来源:互联网 发布:网络出版服务管理规定 编辑:程序博客网 时间:2024/05/18 01:02

From http://www.cnblogs.com/Wendale-Zhang/archive/2013/01/17/2864442.html

更新2013年04月02日11:46:36:修改了用 [imageView setImageWithURLRequest:[NSURLRequestrequestWithURL:[NSURLURLWithString:@""]] placeholderImage:[UIImageimageNamed:@"loader.jpg"] success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {    }];图片不能缓存的问题

ASI好久没更新,于是今天试了下AFNetWorking,调用图片请求方法很方便

但发现个问题,程序重新启动后,图片还要重新请求,原来AFN用的是内存缓存图片机制,这能提高程序效率,但我们有时候,图片的本地缓存也是很重要的,于是,对AFN下UIImageView+AFNetworking.m文件的代码进行了修改,欢迎大家进行指正,修改和添加的方法如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<emid="__mceDel">40                    //图片本地缓存
41                if ([selfcreateDirInCache:@"WendaleCache"]){
42                    NSString *imageType= @"jpg";
43                      //从url中获取图片类型
44                  NSMutableArray *arr= (NSMutableArray *)[urlStringcomponentsSeparatedByString:@"."];
45                    if (arr){
46                          imageType= [arrobjectAtIndex:arr.count-1];
47                      }
48                      [selfsaveImageToCacheDir:[selfpathInCacheDirectory:@"WendaleCache"]image:responseObject imageName:[urlStringmd5]imageType:imageType];
49                }
50                    
51                    
52  53                
54                self.af_imageRequestOperation= nil;
55            }
56
57            [[[selfclass]af_sharedImageCache]cacheImage:responseObjectforRequest:urlRequest];
58
59        } failure:^(AFHTTPRequestOperation *operation,NSError *error){
60            if ([[urlRequestURL]isEqual:[[self.af_imageRequestOperationrequest]URL]]){
61                if (failure){
62                    failure(operation.request,operation.response,error);
63                }
64                
65                self.af_imageRequestOperation= nil;
66            }
67        }];
68        
69        self.af_imageRequestOperation= requestOperation;
70        
71        [[[selfclass]af_sharedImageRequestOperationQueue]addOperation:self.af_imageRequestOperation];
72    }
73}
74
75-(NSString*)pathInCacheDirectory:(NSString *)fileName
76{
77    NSArray *cachePaths= NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
78    NSString *cachePath= [cachePathsobjectAtIndex:0];
79    return [cachePathstringByAppendingPathComponent:fileName];
80}
81//创建缓存文件夹
82-(BOOL)createDirInCache:(NSString *)dirName
83{
84    NSString *imageDir= [selfpathInCacheDirectory:dirName];
85    BOOL isDir= NO;
86    NSFileManager *fileManager= [NSFileManagerdefaultManager];
87    BOOL existed= [fileManagerfileExistsAtPath:imageDirisDirectory:&amp;isDir];
88    BOOL isCreated= NO;
89    if (!(isDir== YES&amp;&amp;existed ==YES))
90    {
91        isCreated =[fileManager createDirectoryAtPath:imageDirwithIntermediateDirectories:YESattributes:nilerror:nil];
92    }
93    if (existed){
94        isCreated =YES;
95    }
96    return isCreated;
97}
98
99// 删除图片缓存
100 -(BOOL)deleteDirInCache:(NSString *)dirName
101{
102     NSString *imageDir= [selfpathInCacheDirectory:dirName];
103    BOOL isDir= NO;
104     NSFileManager *fileManager= [NSFileManagerdefaultManager];
105    BOOL existed= [fileManagerfileExistsAtPath:imageDirisDirectory:&amp;isDir];
106     boolisDeleted =false;
107    if (isDir ==YES &amp;&amp;existed ==YES )
108     {
109        isDeleted =[fileManager removeItemAtPath:imageDirerror:nil];
110     }
111    
112     returnisDeleted;
113}
114
115// 图片本地缓存
116 -(BOOL)saveImageToCacheDir:(NSString *)directoryPath  image:(UIImage *)image imageName:(NSString *)imageNameimageType:(NSString *)imageType
117{
118     BOOLisDir =NO;
119    NSFileManager *fileManager= [NSFileManagerdefaultManager];
120     BOOLexisted =[fileManager fileExistsAtPath:directoryPathisDirectory:&amp;isDir];
121    bool isSaved= false;
122     if( isDir== YES&amp;&amp;existed ==YES )
123    {
124         if([[imageTypelowercaseString]isEqualToString:@"png"])
125        {
126             isSaved= [UIImagePNGRepresentation(image)writeToFile:[directoryPathstringByAppendingPathComponent:[NSStringstringWithFormat:@"%@.%@",imageName,@"png"]]options:NSAtomicWriteerror:nil];
127        }
128         elseif ([[imageTypelowercaseString]isEqualToString:@"jpg"]|| [[imageTypelowercaseString]isEqualToString:@"jpeg"])
129        {
130             isSaved= [UIImageJPEGRepresentation(image,1.0)writeToFile:[directoryPathstringByAppendingPathComponent:[NSStringstringWithFormat:@"%@.%@",imageName,@"jpg"]]options:NSAtomicWriteerror:nil];
131        }
132         else
133        {
134             NSLog(@"Image Save Failed\nExtension: (%@) is not recognized, use (PNG/JPG)", imageType);
135        }
136     }
137    return isSaved;
138 }
139// 获取缓存图片
140 -(NSData*)loadImageData:(NSString *)directoryPathimageName:(NSString *)imageName
141{
142     BOOLisDir =NO;
143    NSFileManager *fileManager= [NSFileManagerdefaultManager];
144     BOOLdirExisted =[fileManager fileExistsAtPath:directoryPathisDirectory:&amp;isDir];
145    if (isDir ==YES &amp;&amp;dirExisted ==YES )
146     {
147        NSString *imagePath= [directoryPathstringByAppendingString: imageName];
148         BOOLfileExisted =[fileManager fileExistsAtPath:imagePath];
149        if (!fileExisted){
150             returnNULL;
151        }
152         NSData *imageData= [NSDatadataWithContentsOfFile: imagePath];
153        return imageData;
154     }
155    else
156     {
157        return NULL;
158     }
159}</em>
0 0
原创粉丝点击