從零開始設(shè)計(jì)搭建ios App框架(八)

請求策略


  • 場景一
    當(dāng)用戶進(jìn)入產(chǎn)品列表頁面后,相信大部分程序開發(fā)者做法是用tableview來展示,產(chǎn)品數(shù)據(jù)通過網(wǎng)絡(luò)接口請求從服務(wù)器獲取,再刷新tableview。偷偷告訴您一個(gè)秘密:其實(shí)我也是這么干的。
    如果用戶退出產(chǎn)品列表,再次進(jìn)入這個(gè)產(chǎn)品列表呢,是重復(fù)上面和操作嗎?如果是,在網(wǎng)絡(luò)不是很好的情況下,先看到空白頁面,得等待一點(diǎn)時(shí)間才能正常使用,有沒有辦法提升一下用戶體驗(yàn)?zāi)兀?/li>
  • 場景二
    還是上述過程,當(dāng)用戶多次進(jìn)入產(chǎn)品列表與退出產(chǎn)品列表的時(shí)間較短(甚至只有十幾秒到幾秒時(shí)間),有沒有辦法幫用戶省點(diǎn)流量呢?

為了提升App的用戶體驗(yàn),數(shù)據(jù)緩存 + 網(wǎng)絡(luò)接口請求策略 可以解決類似這種問題。
其實(shí)我不說,您應(yīng)該已經(jīng)想到具體的實(shí)現(xiàn)方案了。
1、當(dāng)用戶進(jìn)入產(chǎn)品列表時(shí),將請求到的產(chǎn)品數(shù)據(jù)緩存到本地。
2、當(dāng)用戶退出后第二次進(jìn)入時(shí),將緩存的數(shù)據(jù)展示,再加載服務(wù)端數(shù)據(jù),加載完再重新緩存到本地。
3、當(dāng)退出也進(jìn)入的時(shí)間比較短時(shí)可以直接用本地緩存的數(shù)據(jù),不需要再請求網(wǎng)絡(luò)。

在我這框架中實(shí)現(xiàn)這個(gè)策略其實(shí)很簡單,網(wǎng)絡(luò)接口層模塊設(shè)計(jì)中,就可以輕松加入此邏輯。
只需要在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];
        //時(shí)間間隔大于120秒
        if(nTime < 120)
        {
            dataString = (NSString *)[PGCacheManager getApiCacheStringWithKey:key];
        }
        else
        {
            [self.allApiKeyTime setObject:[NSNumber numberWithDouble:[NSDate date].timeIntervalSince1970] forKey:key];
        }
    }
    
    return dataString;
}

再在網(wǎng)絡(luò)接口的統(tǒng)一入口方法中添加如下代碼:

//需要緩存的接口才做緩存處理
    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;
        }
    }

相應(yīng)的數(shù)據(jù)緩存可以參考: 數(shù)據(jù)持久化

#pragma mark -
/**
 避免API接口頻繁的調(diào)用。
 */
+ (NSObject *)getApiCacheStringWithKey:(NSString *)key;
/*
 緩存接口數(shù)據(jù)
 */
+ (BOOL)cacheApiData:(NSString *)apiString key:(NSString *)szKey;

是不是很簡單!
共同學(xué)習(xí)進(jìn)步!
感謝您的閱讀!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,680評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,308評論 25 708
  • iOS網(wǎng)絡(luò)架構(gòu)討論梳理整理中。。。 其實(shí)如果沒有APIManager這一層是沒法使用delegate的,畢竟多個(gè)單...
    yhtang閱讀 5,494評論 1 23
  • 雨簾在風(fēng)中變成了一條條傾斜的平行線,一個(gè)沒有雨具的女人,右手拿著個(gè)包頂在頭上,左手前后擺動(dòng)配合雙腿快速的奔跑…… ...
    空格兒閱讀 388評論 3 2
  • 我的記賬APP:隨手記 我用隨手記堅(jiān)持不到1年,都只是單獨(dú)做日常支出記賬,我從來都沒有都沒有認(rèn)真分析數(shù)據(jù),沒有去尋...
    曉曉002閱讀 127評論 0 1

友情鏈接更多精彩內(nèi)容