NSCache
NSCache 與 NSMutableDictionary 用法相似仇参,但是線程安全的,不需要加鎖卓箫,在系統(tǒng)內(nèi)存很低時(shí)迷雪,會(huì)自動(dòng)釋放一些對(duì)象限书,多用于get 請(qǐng)求。
-(NSCache*)myCache{
if (!_myCache) {
_myCache = [[NSCache alloc]init];
_myCache.countLimit = 30; //設(shè)置了最大存儲(chǔ)對(duì)象最大數(shù)量
_myCache.delegate = self; //設(shè)置代理
}
return _myCache;
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
for (int i = 0; i < 50; i++) {
NSString *str = [NSString stringWithFormat:@"測(cè)試%d",i];
[self.myCache setObject:str forKey:@(i)];
}
for (int i = 0; i < 50; i++) {
NSLog(@"%d-%@",i,[self.myCache objectForKey:@(i)]);
}
}
//代理方法緩存過(guò)限時(shí)自動(dòng)清理之前的數(shù)據(jù)
//一般用于程序測(cè)試
- (void)cache:(NSCache*)cache willEvictObject:(nonnull id)obj {
NSLog(@"刪除-%@",obj);
}
YYCache
- YYCache 主要由YYCache振乏、YYDiskCache和YYMemoryCache組成
在不指定存儲(chǔ)方式下蔗包,先從內(nèi)存中讀取秉扑,沒(méi)有則從磁盤讀取慧邮,有就用,并寫入內(nèi)存舟陆,沒(méi)有則返回空误澳。
//設(shè)置YYCache屬性,類似于創(chuàng)建數(shù)據(jù)表,name即表名
YYCache *cache = [[YYCache alloc] initWithName:@"SPHttpCache"];
cache.memoryCache.shouldRemoveAllObjectsOnMemoryWarning = YES;
cache.memoryCache.shouldRemoveAllObjectsWhenEnteringBackground = YES;
id cacheData;
if (isCache) {//如果需要緩存
//根據(jù)網(wǎng)址從Cache中取數(shù)據(jù)
cacheData = [cache objectForKey:cacheKey];//key為緩存的key
if (cacheData != 0) {//如果有緩存數(shù)據(jù)
//將數(shù)據(jù)統(tǒng)一處理緩存數(shù)據(jù)秦躯,并有有網(wǎng)的情況下對(duì)緩存數(shù)據(jù)進(jìn)行對(duì)比
[self returnDataWithRequestData:cacheData Success:^(NSDictionary *requestDic, NSString *msg) {
MCLog(@"緩存數(shù)據(jù)\n\n %@ \n\n",requestDic);
success(requestDic,msg);
} failure:^(NSString *errorInfo) {
failure(errorInfo);
}];
}
}
//進(jìn)行網(wǎng)絡(luò)檢查
if (![self requestBeforeJudgeConnect]) {
failure(@"沒(méi)有網(wǎng)絡(luò)");
MCLog(@"\n\n----%@------\n\n",@"沒(méi)有網(wǎng)絡(luò)");
return;
}
//如果有網(wǎng)絡(luò)忆谓,則進(jìn)行網(wǎng)絡(luò)請(qǐng)求
。踱承。倡缠。哨免。。
網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求回來(lái)后昙沦,作比對(duì)處理
//緩存數(shù)據(jù)與請(qǐng)求回的數(shù)據(jù)不一致琢唾,則更新數(shù)據(jù)
if (![cacheData isEqual:requestData]) {
id myResult = [NSJSONSerialization JSONObjectWithData:requestData options:NSJSONReadingMutableContainers error:nil];
//判斷是否為字典
if ([myResult isKindOfClass:[NSDictionary class]]) {
NSDictionary * requestDic = (NSDictionary *)myResult;
//根據(jù)返回的接口內(nèi)容來(lái)變
NSString * succ = requestDic[@"status"];
if ([succ isEqualToString:@"success"]) {
success(requestDic[@"result"],requestDic[@"msg"]);
}else{
failure(requestDic[@"msg"]);
}
}
}