清除缓存 AFNetworking 后图像未从磁盘中删除
Images are not removed from disk after clearing cache AFNetworking
我试过清除缓存位,应用的大小并没有明显变小。
我的应用程序大小约为 30MB,另外还有 45MB 用于缓存图像。
这是我尝试清除缓存的方式:
[[NSURLCache sharedURLCache] removeAllCachedResponses];
[[AFImageDownloader defaultURLCache] removeAllCachedResponses];
AFAutoPurgingImageCache *imageCache = [AFImageDownloader defaultInstance].imageCache;
[imageCache removeAllImages];
- 在我的 iPhone 6 iOS10 上,应用程序的大小没有变小。
- 模拟器里面的应用程序文件
com.alamofire.imagedownloader/fsCachedData
所有文件都还在
这是我使用 AFNetworking (3.1.0) 下载图像的方式:
#import "AFImageDownloader.h"
[photoImageView setImageWithURLRequest:[NSURLRequest requestWithURL:thumb] placeholderImage:myCachedImage success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
[self setPhotoImage:image];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
[self setupPlaceholder];
}];
见下文:
AFAutoPurgingImageCache *imageCache = [AFImageDownloader defaultInstance].imageCache;
把imageCache
存到内存里,做[imageCache removeAllImages];
没用
- 您只需要做
[[AFImageDownloader defaultURLCache] removeAllCachedResponses];
。它是 apple 唯一提供的清除 URLCache
. 的 API
- 你发现当你调用
removeAllCachedResponses
时 fsCachedData
没有被删除。因为苹果有自己的磁盘数据清除机制。可能是我搜索的每7天清一次盘数据,但我不确定。
- 我认为看看其他人如何使用
fsCachedData
很有趣。 Should I clear the fsCachedData folder myself?
- 希望对你有所帮助
我们也在我们的一个应用程序中看到了这一点。根据此 http://blog.airsource.co.uk/2014/10/11/nsurlcache-ios8-broken/,这是一个 iOS 8 错误,Apple 将在今天的 iOS 8.1 更新中更正它。
所以回答你的问题:不,你不应该自己删除缓存,幸运的是 Apple 的修复确实会清理旧数据。如果由于某种原因没有,您应该可以自己删除它,没有任何问题。
我已经证实 iOS 8.1 确实解决了这个问题。但是,用户必须在更新后启动应用一次才能清除缓存。
此代码适用于 AFNetworking 3.1:
[[NSURLCache sharedURLCache] removeAllCachedResponses];
AFImageDownloader *imageDownloader = [AFImageDownloader defaultInstance];
NSURLCache *urlCache = imageDownloader.sessionManager.session.configuration.URLCache;
[urlCache removeAllCachedResponses];
[imageDownloader.imageCache removeAllImages];
我试过清除缓存位,应用的大小并没有明显变小。
我的应用程序大小约为 30MB,另外还有 45MB 用于缓存图像。
这是我尝试清除缓存的方式:
[[NSURLCache sharedURLCache] removeAllCachedResponses];
[[AFImageDownloader defaultURLCache] removeAllCachedResponses];
AFAutoPurgingImageCache *imageCache = [AFImageDownloader defaultInstance].imageCache;
[imageCache removeAllImages];
- 在我的 iPhone 6 iOS10 上,应用程序的大小没有变小。
- 模拟器里面的应用程序文件
com.alamofire.imagedownloader/fsCachedData
所有文件都还在
这是我使用 AFNetworking (3.1.0) 下载图像的方式:
#import "AFImageDownloader.h"
[photoImageView setImageWithURLRequest:[NSURLRequest requestWithURL:thumb] placeholderImage:myCachedImage success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
[self setPhotoImage:image];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
[self setupPlaceholder];
}];
见下文:
AFAutoPurgingImageCache *imageCache = [AFImageDownloader defaultInstance].imageCache;
把imageCache
存到内存里,做[imageCache removeAllImages];
没用
- 您只需要做
[[AFImageDownloader defaultURLCache] removeAllCachedResponses];
。它是 apple 唯一提供的清除URLCache
. 的 API
- 你发现当你调用
removeAllCachedResponses
时fsCachedData
没有被删除。因为苹果有自己的磁盘数据清除机制。可能是我搜索的每7天清一次盘数据,但我不确定。 - 我认为看看其他人如何使用
fsCachedData
很有趣。 Should I clear the fsCachedData folder myself? - 希望对你有所帮助
我们也在我们的一个应用程序中看到了这一点。根据此 http://blog.airsource.co.uk/2014/10/11/nsurlcache-ios8-broken/,这是一个 iOS 8 错误,Apple 将在今天的 iOS 8.1 更新中更正它。
所以回答你的问题:不,你不应该自己删除缓存,幸运的是 Apple 的修复确实会清理旧数据。如果由于某种原因没有,您应该可以自己删除它,没有任何问题。
我已经证实 iOS 8.1 确实解决了这个问题。但是,用户必须在更新后启动应用一次才能清除缓存。
此代码适用于 AFNetworking 3.1:
[[NSURLCache sharedURLCache] removeAllCachedResponses];
AFImageDownloader *imageDownloader = [AFImageDownloader defaultInstance];
NSURLCache *urlCache = imageDownloader.sessionManager.session.configuration.URLCache;
[urlCache removeAllCachedResponses];
[imageDownloader.imageCache removeAllImages];