ios 数据缓存到内存

什么时候缓存到内存中去呢,就像大家用的比较多的开源库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) {
       // 
    }
// 如果内存中有,并且符合你选择的

大功告成,这样的

你可能感兴趣的:(ios 数据缓存到内存)