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:&isDir];
88 BOOL isCreated= NO;
89 if (!(isDir== YES&&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:&isDir];
106 boolisDeleted =false;
107 if (isDir ==YES &&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:&isDir];
121 bool isSaved= false;
122 if( isDir== YES&&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:&isDir];
145 if (isDir ==YES &&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
- AFNetworking 图片的本地缓存问题
- AFNetworking 图片的本地缓存问题
- AFNetworking 图片的本地缓存问题
- AFNetworking 图片的本地缓存问题
- AFNetworking图片缓存问题
- AFNetworking图片缓存问题
- AFNetworking图片缓存问题<转>
- AFNetworking图片缓存问题 -- @ShinePug
- « AFNetworking 图片的本地缓存问题 Get application bundle seed ID in iOS » AFNetworking 使用总结 (用法+JSON解析)
- 关于ImageLoader加载本地缓存下来的图片的问题?
- AFNetworking 配合NSURLCache 本地缓存
- iOS疯狂详解之AFNetworking图片缓存问题
- AFN图片的本地缓存
- 使用AFNetworking上传图片遇到的问题
- 图片的异步加载和本地缓存
- ImageLoader获取本地缓存图片的bitmap
- AFNetworking网络请求时注意的cookies缓存问题
- Android图片本地缓存
- 我的太鼓达人2
- « AFNetworking 图片的本地缓存问题 Get application bundle seed ID in iOS » AFNetworking 使用总结 (用法+JSON解析)
- poj 1681 极角排序(只能向左拐的虫子)
- 记录重要的资源网站
- Maltab 坐标轴精度设置
- AFNetworking 图片的本地缓存问题
- 三本可以一买的 Python 书
- 使Android开发方便快捷的8个好工具
- LeetCode Binary Tree Maximum Path Sum
- AFNetworking 学习笔记
- Linux C语言编程学习笔记 (1)进程控制入门
- ,婷妍食品机械有限公司,杰尔机械设备有限公司
- 项目上线与LOG记录
- 基于距离的计算方法