iOS iOS Developer

从零开始设计搭建ios App框架(八)

2016-09-24  本文已影响147人  潇水渔翁

请求策略


为了提升App的用户体验,数据缓存 + 网络接口请求策略 可以解决类似这种问题。
其实我不说,您应该已经想到具体的实现方案了。
1、当用户进入产品列表时,将请求到的产品数据缓存到本地。
2、当用户退出后第二次进入时,将缓存的数据展示,再加载服务端数据,加载完再重新缓存到本地。
3、当退出也进入的时间比较短时可以直接用本地缓存的数据,不需要再请求网络。

在我这框架中实现这个策略其实很简单,网络接口层模块设计中,就可以轻松加入此逻辑。
只需要在PGCacheManager文件添加少许代码就可以了。

#pragma mark - API请求策略逻辑
- (BOOL)bEnableStrategy:(PGApiType)type
{
    BOOL bEnable = YES;
    switch(type)
    {
        case API_TYPE_LOGIN:
        {
            bEnable = NO;
            break;
        }
        default:
            break;
    }
    return bEnable;
}

- (NSString *)cacheSringWithKey:(NSString *)key
{
    NSString *dataString = nil;
    
    NSNumber *timeNumber = [self.allApiKeyTime objectForKey:key];
    if(timeNumber)
    {
        double nTime = [NSDate date].timeIntervalSince1970 - [timeNumber doubleValue];
        //时间间隔大于120秒
        if(nTime < 120)
        {
            dataString = (NSString *)[PGCacheManager getApiCacheStringWithKey:key];
        }
        else
        {
            [self.allApiKeyTime setObject:[NSNumber numberWithDouble:[NSDate date].timeIntervalSince1970] forKey:key];
        }
    }
    
    return dataString;
}

再在网络接口的统一入口方法中添加如下代码:

//需要缓存的接口才做缓存处理
    if([self bEnableStrategy:type])
    {
        NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
        [dic setObject:@(type).stringValue forKey:@"apiType"];
        [dic addEntriesFromDictionary:param];
        NSString *key = [NSString MD5Encrypt:[NSString jsonStringWithDictionary:dic]];
        NSString *dataString = [self cacheSringWithKey:key];
        if(dataString)
        {
            [client parseData:dataString];
            return;
        }
    }

相应的数据缓存可以参考: 数据持久化

#pragma mark -
/**
 避免API接口频繁的调用。
 */
+ (NSObject *)getApiCacheStringWithKey:(NSString *)key;
/*
 缓存接口数据
 */
+ (BOOL)cacheApiData:(NSString *)apiString key:(NSString *)szKey;

是不是很简单!
共同学习进步!
感谢您的阅读!

上一篇下一篇

猜你喜欢

热点阅读