AWCache设计思路

作者: molangwu | 来源:发表于2020-05-29 17:20 被阅读0次

前言

最近阅读 YYCache和SDImageCache源码,学到了挺多东西,为了验证学习结果,模仿写了AWCache。

内存缓存实现方案

SDImageCache:NSCache+weakCache
YYCache:双链表+ NSDictionary
AWCache:NSCache+weakCache

磁盘缓存实现方案

SDImageCache:文件
YYCache:SQLite +文件
AWCache:文件

AWMemoryCache.h

@interface AWMemoryCache<KeyType, ObjectType> : NSCache <KeyType, ObjectType>

@property (nonatomic, class, readonly, nonnull) AWMemoryCache *sharedMemoryCache;

@property (assign, nonatomic) BOOL shouldRemoveAllObjectsOnMemoryWarning;

@property (assign, nonatomic) BOOL shouldRemoveAllObjectsWhenEnteringBackground;

@end

AWDiskCache.h

typedef NS_ENUM(NSUInteger, AWDiskCacheExpireType) {
    AWDiskCacheExpireTypeModificationDate,
    AWDiskCacheExpireTypeAccessDate,
    AWDiskCacheExpireTypeCreationDate
};

@interface AWDiskCache : NSObject

@property (nonatomic, class, readonly, nonnull) AWDiskCache *sharedDiskCache;

@property (nonatomic, assign) NSDataReadingOptions diskCacheReadingOptions;
@property (nonatomic, assign) NSDataWritingOptions diskCacheWritingOptions;

@property (assign, nonatomic) AWDiskCacheExpireType diskCacheExpireType;

@property (nonatomic, assign) NSTimeInterval maxDiskAge;
@property (nonatomic, assign) NSUInteger maxDiskSize;

- (instancetype)init NS_UNAVAILABLE;
- (nullable instancetype)initWithCacheName:(NSString *)name;
- (nullable instancetype)initWithCachePath:(NSString *)cachePath;

- (NSUInteger)totalSize;
- (void)totalSizeWithBlock:(void(^)(NSUInteger))block;

- (NSUInteger)totalCount;
- (void)totalCountWithBlock:(void(^)(NSUInteger))block;

- (nullable NSData *)dataForKey:(NSString *)key;
- (void)dataForKey:(NSString *)key withBlock:(void(^)(NSString *key, NSData * _Nullable data))block;

- (void)setData:(NSData *)data forKey:(NSString *)key;
- (void)setData:(NSData *)data forKey:(NSString *)key withBlock:(nullable void(^)(NSString *key))block;

- (void)removeDataForKey:(NSString *)key;
- (void)removeDataForKey:(NSString *)key withBlock:(nullable void(^)(NSString *key))block;

- (void)removeAllData;
- (void)removeAllDataWithBlock:(nullable void(^)(void))block;

- (void)removeExpiredData;
- (void)removeExpiredDataWithBlock:(nullable void(^)(void))block;

@end

总结

YYCache丰富和强大
SDImageCache简单好用

源码地址

https://github.com/molangwu/AWCache

参考文献

https://github.com/ibireme/YYKit
https://github.com/SDWebImage/SDWebImage

相关文章

  • AWCache设计思路

    前言 最近阅读 YYCache和SDImageCache源码,学到了挺多东西,为了验证学习结果,模仿写了AWCac...

  • 智能客服设计

    Chat-bot 设计思路 在下面介绍的设计思路过滤了一些细节。 阿里小蜜设计思路 腾讯客服设计思路 智能客服机器...

  • 设计思路

    确定页面类型 导航型 侧重路径引导和流量分发,有较强的运营性质。纯粹入口型,不同强弱使用不同的核心内容做做入口,引...

  • UI设计

    设计思路

  • webreader设计思路

    webreader设计思路

  • ui设计思路;ui设计思路框架

    ui设计思路;ui设计思路框架。哈喽大家好!我是你们的好朋友小易,关于ui设计,每次感觉好像都是有讲不完的东...

  • IM websocket 系统架构思考

    1 背景 2 目标 2 系统架构设计思路 2.1 架构图 2.2 设计思路 2.3 设计细节 用户发送消息流程 i...

  • 一个日记AP

    (a) 分析日记类产品的用户需求,针对性给出相应的产品设计,阐述设计思路 1,设计思路 ①,产品定位:轻社交属性日...

  • 2018-12-05

    产品规划和概念设计 从上到下的全局观设计思路-产品规划;从下到上的创新型设计思路-概念设计。 产品规划是全局的,站...

  • python3编写爬虫程序获取链家网租房信息

    程序设计思路 爬虫程序的设计思路大同小异,下面是我的设计思路1.模拟浏览器抓取数据2.清洗数据3.存入数据库或者E...

网友评论

    本文标题:AWCache设计思路

    本文链接:https://www.haomeiwen.com/subject/rqcfzhtx.html