iOS数据库离线缓存思路和网络层封装——数据缓存机制Model封装
来源:互联网 发布:宿州智慧云计算产业园 编辑:程序博客网 时间:2024/05/01 23:10
.h文件
#import <Foundation/Foundation.h>#import <UIKit/UIKit.h>/// 缓存策略typedef NS_ENUM(NSInteger, NetworkCacheType){ /// 无视缓存,总是请求最新的数据 NetworkCacheTypeAlways = 1, /// 缓存过期时,才请求最新的数据 NetworkCacheTypeWhileOverdue, /// 不做缓存处理 NetworkCacheTypeNever};/// 缓存时间长短 1 weekstatic CGFloatconst NetworkCacheTimeWeek = (60 *60 * 24 *7);/// 缓存时间长短 1 daystatic CGFloatconst NetworkCacheTimeDay = (60 *60 * 24 *1);@interface SYNetworkCache :NSObject///缓存时的日期@property (nonatomic,strong) NSDate *cacheDate;///缓存有效期@property (nonatomic,strong) NSNumber *cacheValiditySeconds;///缓存过期日期@property (nonatomic,strong) NSDate *cacheOverdueDate;/// 缓存内容@property (nonatomic,strong) NSData *cacheData;/// 缓存key值@property (nonatomic,strong) NSString *cacheKey;/// 单例+ (SYNetworkCache *)shareCache;/// 缓存数据- (void)saveNetworkCacheData:(NSData *)responseData cachekey:(NSString *)urlKey cacheTime:(NSTimeInterval)expiresInSeconds;///获取指定缓存数据- (NSData *)getNetworkCacheContentWithCacheKey:(NSString *)urlKey;///清除指定的数据- (void)deleteNetworkCacheWithKey:(NSString *)urlKey;///计算缓存数据库文件大小- (NSString *)networkCacheSize;///清除缓存(是否删除表)- (void)networkCacehClear:(BOOL)dropTable;@end
.m文件
#import "SYNetworkCache.h"#import <CommonCrypto/CommonDigest.h>#import "SYFMDBManager.h"@interface SYNetworkCache ()@end@implementation SYNetworkCache// 初始化- (instancetype)init{ self = [superinit]; if (self) { [[SYFMDBManagershareFMDB] createTable:[SYNetworkCacheclass]]; } returnself;}- (void)dealloc{ }#pragma mark - 单例// 单例+ (SYNetworkCache *)shareCache{ staticSYNetworkCache *sharedManager; staticdispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedManager = [[selfalloc] init]; assert(sharedManager !=nil); }); return sharedManager;}#pragma mark - 数据缓存/// 缓存数据- (void)saveNetworkCacheData:(NSData *)responseData cachekey:(NSString *)urlKey cacheTime:(NSTimeInterval)expiresInSeconds{ SYNetworkCache *downloadCache = [[SYNetworkCachealloc] init]; downloadCache.cacheKey = urlKey; downloadCache.cacheDate = [NSDatedate]; downloadCache.cacheValiditySeconds = [NSNumbernumberWithDouble:expiresInSeconds]; downloadCache.cacheData = responseData; downloadCache.cacheOverdueDate = [[NSDatedate] dateByAddingTimeInterval:expiresInSeconds]; // 保存 [[SYFMDBManagershareFMDB] saveDataWithData:downloadCache];}#pragma mark - 数据读取///获取指定缓存数据- (NSData *)getNetworkCacheContentWithCacheKey:(NSString *)urlKey{ if (urlKey) { SYNetworkCache *cache; NSArray *array = [[SYFMDBManagershareFMDB] getAllDataWithClass:[SYNetworkCacheclass]]; NSPredicate *predicate = [NSPredicatepredicateWithFormat:@"cacheKey == %@",urlKey]; NSArray *results = [arrayfilteredArrayUsingPredicate:predicate]; cache = results.firstObject; NSDate *expiryDate = cache.cacheOverdueDate; // 存储的数据已过期 NSComparisonResult compareResult = [[NSDatedate] compare:expiryDate]; if (NSOrderedDescending == compareResult) { // 删除过期数据 [selfdeleteNetworkCacheWithKey:urlKey]; returnnil; } NSData *content = cache.cacheData; return content; } returnnil;}#pragma mark - 数据清除///清除指定的数据- (void)deleteNetworkCacheWithKey:(NSString *)urlKey{ if (urlKey ==nil) { return; } SYNetworkCache *cache; NSArray *array = [[SYFMDBManagershareFMDB] getAllDataWithClass:[SYNetworkCacheclass]]; NSPredicate *predicate = [NSPredicatepredicateWithFormat:@"cacheKey == %@",urlKey]; NSArray *results = [arrayfilteredArrayUsingPredicate:predicate]; cache = results.firstObject; [[SYFMDBManagershareFMDB] deleteDataWithData:cache];}/// 清除内存- (void)networkCacheClearMemory{ // won't be able to complete}///清除所有的缓存- (void)networkCacheClearAll{ [[SYFMDBManagershareFMDB] deleteAllData];}///计算缓存数据库文件大小- (NSString *)networkCacheSize{ NSUInteger size =0; NSArray *array = [[SYFMDBManagershareFMDB] getAllDataWithClass:[SYNetworkCacheclass]]; for (SYNetworkCache *modelin array) { NSData *cacheData = model.cacheData; NSUInteger cacheSize = cacheData.length; size += cacheSize; } NSString *sizeStr = [NSStringstringWithFormat:@"%ldB", size]; if (size >1024 * 1024) { size = size / 1024 *1024; sizeStr = [NSStringstringWithFormat:@"%ldM", size]; } elseif (size > 1024) { size = size / 1024; sizeStr = [NSStringstringWithFormat:@"%ldKB", size]; } return sizeStr;}///清除缓存(是否删除表)- (void)networkCacehClear:(BOOL)dropTable{ [[SYFMDBManagershareFMDB] deleteAllData:^{ if (dropTable) { [[SYFMDBManagershareFMDB] dropTable:[SYNetworkCacheclass]]; } }];}@end
0 0
- iOS数据库离线缓存思路和网络层封装——数据缓存机制Model封装
- iOS数据库离线缓存思路和网络层封装——数据缓存操作封装
- iOS数据库离线缓存思路和网络层封装——网络请求基类封装
- iOS数据库离线缓存思路和网络层封装
- iOS 数据库离线缓存思路和网络层封装
- iOS数据库离线缓存思路和网络层封装
- iOS 数据库离线缓存思路和网络层封装
- iOS数据库离线缓存思路和网络层封装
- iOS数据库离线缓存思路和网络层封装——原理
- 数据库封装之app离线缓存
- 数据存储封装—支持内存和本地缓存
- iOS 清除缓存封装
- ios清除缓存封装
- iOS ---网络请求封装(自动缓存与手动缓存)
- 封装缓存
- 使用缓存封装高复用数据
- 网络数据解析及加载本地 缓存封装
- iOS开发网络——数据缓存
- 关于Spring mvc 一次请求Controller执行两次的问题
- S3C2451_nand flash_ARM操作读写源码
- Leetcode题解 155. Min Stack
- ssh: connect to host localhost port 22: Connection refused 问题
- 练习二1013,1014
- iOS数据库离线缓存思路和网络层封装——数据缓存机制Model封装
- jQuery事件(ready/bind/hover/toggle/unbind/one/trigger/focus/blur/change/live)
- 为什么毕业三四年之后,同学之间的差距会这么大?
- 练习二1015
- 23.Java IO: Serializable && StreamTokenizer
- Opengl备忘4---Texture
- 奇怪的lib形式
- iOS数据库离线缓存思路和网络层封装——网络请求基类封装
- MATLAB中plot()画图的颜色线型参数设置