ios html清除缓存图片,iOS SDWebImage图片缓存处理

前言

以前一直使用,也没有花太多时间去看看实现的机制,现在抽时间好好研究一下,只有明白里面的实现才能使用的更顺手,即便出现问题,也能很快定位问题的位置。

导入头文件#import "SDWebImageCompat.h"

typedef NS_ENUM(NSInteger, SDImageCacheType) {

/**

* The image wasn't available the SDWebImage caches, but was downloaded from the web.

*/

SDImageCacheTypeNone,

/**

* The image was obtained from the disk cache.

*/

SDImageCacheTypeDisk,

/**

* The image was obtained from the memory cache.

*/

SDImageCacheTypeMemory

};

typedef void(^SDWebImageQueryCompletedBlock)(UIImage *image, SDImageCacheType cacheType);

typedef void(^SDWebImageCheckCacheCompletionBlock)(BOOL isInCache);

typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger totalSize);

/**

SDWebImage缓存机制类

*/

@interface SDImageCache : NSObject

/**

是否压缩,压缩下载的图片和缓存可以提高执行速度,但是会消耗大量内存,默认为yes,当程序出现因为过重的内存消耗而导致崩溃时,可将其设置为NO。

注意:该属性可能造成大量的内存消耗,之前在其他人bog中也看到过因为设置该属性为yes(默认就是yes)后造成大量内存消耗,图片的像素越高内存消耗越大。解决办法:

[SDImageCache sharedImageCache].shouldDecompressImages = NO;

[SDWebImageDownloader sharedDownloader].shouldDecompressImages = NO;

*/

@property (assign, nonatomic) BOOL shouldDecompressImages;

/**

保存在存储器中像素的总和

*/

@property (assign, nonatomic) NSUInteger maxMemoryCost;

/**

* The maximum number of objects the cache should hold.

*/

@property (assign, nonatomic) NSUInteger maxMemoryCountLimit;

/**

缓存的最大时间长度,单位为秒,超过这个时间,就过期了可用cleanDisk清除过期的图片资源。

*/

@property (assign, nonatomic) NSInteger maxCacheAge;

/**

缓存的最大容量,单位字节

*/

@property (assign, nonatomic) NSUInteger maxCacheSize;

/**

获得SDImageCache全局单列

*/

+ (SDImageCache *)sharedImageCache;

/**

存在图片到内存缓存中,根据设置的选项是否也保存到硬盘中

*

* @param image 保存的图片

* @param 是否从image图片中重新构建图片的二进制数据(该数据时保存到硬盘中的图片数据)

* @param imageData 获取的图片的二进制数据,有源代码可知道,如果imageData有值的话保存到硬盘的图片数据就是它

* @param key 唯一的图片缓存Key 值,一般是图片的决定路径

* @param toDisk 是否保存到硬盘中

- (void)storeImage:(UIImage *)image forKey:(NSString *)key;

- (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk;

以上两个函数其实也是调用了- (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk;只是使用了默认的参数而已。

*/

- (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk;

/**

* 异步获取图片先从内存缓存中,然后在从硬盘缓存中获取

*

* @param key 缓存图片时使用的key

*/

- (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock;

/**

同步从内存缓存中获取图片

*/

- (UIImage *)imageFromMemoryCacheForKey:(NSString *)key;

/**

同步从硬盘缓存中获取图片

*/

- (UIImage *)imageFromDiskCacheForKey:(NSString *)key;

/**

* 从内存中移除图片,根据设置的选项决定是否也从硬盘上移除对应的图片数据

*

* @param key 缓存图片的唯一表识码

* @param fromDisk 是否也也移除保存到硬盘上key对应的图片数据

* @param completion block给予一次当图片移除后如何操作

- (void)removeImageForKey:(NSString *)key;

- (void)removeImageForKey:(NSString *)key withCompletion:(SDWebImageNoParamsBlock)completion;

- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk;

以上三个函数也是调用了- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion只是使用了默认参数而已。

- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion;

/**

清除图片的内存缓存(注意:仅仅时内存中缓存,并不清除硬盘的图片数据)

*/

- (void)clearMemory;

/**

清除保存到硬盘的上的图片资源(不包括内存缓存),completion block提供硬盘图片资源清除的操作

- (void)clearDisk;调用了- (void)clearDiskOnCompletion:(SDWebImageNoParamsBlock)completion;函数,使用了默认参数

*/

- (void)clearDiskOnCompletion:(SDWebImageNoParamsBlock)completion;

/**

清除硬盘上过期的图片资源数据,参数为清除之图片数据之后的操作

- (void)cleanDisk调用了- (void)cleanDiskWithCompletionBlock:(SDWebImageNoParamsBlock)completionBlock;使用了默认参数

*/

- (void)cleanDiskWithCompletionBlock:(SDWebImageNoParamsBlock)completionBlock;

/**

* Get the size used by the disk cache

获取硬盘缓存消耗的磁盘容量大小

*/

- (NSUInteger)getSize;

/**

* Get the number of images in the disk cache

获得硬盘上的图片数量

*/

- (NSUInteger)getDiskCount;

/**

* Asynchronously calculate the disk cache's size.

异步计算硬盘缓存的大小

*/

- (void)calculateSizeWithCompletionBlock:(SDWebImageCalculateSizeBlock)completionBlock;

/**

检查key相对的图片是否已经在硬盘缓存中,异步的

*/

- (void)diskImageExistsWithKey:(NSString *)key completion:(SDWebImageCheckCacheCompletionBlock)completionBlock;

/**

检查key相对的图片是否已经在硬盘缓存中,同步的

*/

- (BOOL)diskImageExistsWithKey:(NSString *)key;

/**

根据key获取对应图片的路径,参数path为设置的根路径

*/

- (NSString *)cachePathForKey:(NSString *)key inPath:(NSString *)path;

/**

根据某个唯一key值获得默认硬盘上保存图片数据的默认路径

*/

- (NSString *)defaultCachePathForKey:(NSString *)key;

@end

特别声明

笔者只是对原文进行一次排版。如造成侵权,请与我联系,微信:Q754922492。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值