您好,欢迎来到二三四教育网。
搜索
您的当前位置:首页从零开始设计搭建ios App框架(八)

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

来源:二三四教育网

请求策略


  • 场景一
    当用户进入产品列表页面后,相信大部分程序开发者做法是用tableview来展示,产品数据通过网络接口请求从服务器获取,再刷新tableview。偷偷告诉您一个秘密:其实我也是这么干的。
    如果用户退出产品列表,再次进入这个产品列表呢,是重复上面和操作吗?如果是,在网络不是很好的情况下,先看到空白页面,得等待一点时间才能正常使用,有没有办法提升一下用户体验呢?
  • 场景二
    还是上述过程,当用户多次进入产品列表与退出产品列表的时间较短(甚至只有十几秒到几秒时间),有没有办法帮用户省点流量呢?

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

#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;

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

Copyright © 2019- how234.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务