ios 数据缓存到内存
2018-07-03 本文已影响32人
fulen
什么时候缓存到内存中去呢,就像大家用的比较多的开源库SDWebImage一样,如果加载过,那就从内存中去拿,这个是一次性的,程序kill掉之后就没了,那么现在刚好有这么一个需求也,就是要在内存中缓存一部分数据
废话不多说,首先我们需要一个UserManager类(单例类),然后
上代码
UserManager.h
@property(nonatomic,strong) NSMutableDictionary *spotfileCacheData;
// 缓存数据的方法
- (void)setSpotfileCacheDataWithReportDetail:(ReportDetail *)reportDetail;
@interface UserManager()
@end
@implementation UserManager
+ (instancetype)sharedInstance
{
static id instance = nil;
static dispatch_once_t token;
dispatch_once(&token,^{
if (!instance) {
instance = [UserManager new];
}
});
return instance;
}
// 懒加载
- (NSMutableDictionary *)spotfileCacheData {
if (!_spotfileCacheData) {
_spotfileCacheData = [NSMutableDictionary dictionaryWithCapacity:0];
}
return _spotfileCacheData;
}
- (void)setSpotfileCacheDataWithReportDetail:(ReportDetail *)reportDetail {
if ([reportDetail.name isNotEmptyAndWhitespace]) {
[self.spotfileCacheData setObject:reportDetail forKey:reportDetail.name];
}
}
// 有些需求是在退出登录的时候,清空缓存的数据
那么可以在logout 方法里面将_spotfileCacheData置空,logout方法此处不写了
2. 调用
在需要缓存的页面,等数据请求回来之后,调用此方法
[[UserManager sharedInstance] setSpotfileCacheDataWithReportDetail:self.reportDetail];
使用缓存的话,直接遍历字典就行
for (ReportDetail *reportDe in [UserManager sharedInstance].spotfileCacheData.allValues) {
//
}
// 如果内存中有,并且符合你选择的
大功告成,这样的