美文网首页iOS开发首页投稿(暂停使用,暂停投稿)程序员
iOS开发缓存的实际运用:避免多余的数据请求

iOS开发缓存的实际运用:避免多余的数据请求

作者: 无夜之星辰 | 来源:发表于2017-12-02 15:53 被阅读943次
iu

什么是多余的数据请求?

如GIF所示:


“休闲食品”被点击了两次,两次都出现了loading也就是说两次都请求了数据。第二次请求数据就是多余的。

这里的流程是:

点击左边的cell,传一个id到后台,获取到数据后展示。

为避免多余的数据请求,我使用的解决方案是:

请求数据之前先在缓存数组中寻找缓存的model,如果有,就不请求数据,直接用缓存的,如果没有,再请求数据,并且将model放到缓存数组里。

1.需要一个用来缓存model的数组

/** 右边模块的model缓存数组 */
@property (nonatomic, strong) NSMutableArray *itemsModelArray;

2.请求数据前看看有没有缓存的,有就直接用

// 从缓存数组里找model,如果有就直接用
for (CQBoutiqueItemsModel *itemsModel in self.itemsModelArray) {
    if ([itemsModel.catID isEqualToString:model.ID]) {
        self.itemsView.model = itemsModel;
        return;
    }
}

//------- 请求数据  ------//

如何判断是否有缓存的model,我的方法是遍历缓存数组查看是否有model的id与传入的id一致的。

3.如果没有缓存的,请求数据,并缓存

//------- 请求数据完成  ------//

// 赋值model
self.itemsView.model = itemsModel;
// 放入缓存数组
[self.itemsModelArray addObject: itemsModel];

使用缓存后的效果如下:


只要是请求过的就不会再请求了。

注意:

刷新的时候记得清空缓存数组,要不然刷新就失去意义了。

相关文章

网友评论

  • PGOne爱吃饺子:我去,你这个app怎么和我们公司的app一毛一样啊
    无夜之星辰:@4140d18ee6fc 我感觉电商APP都差不多:joy:
  • 三创iOS和PHP开发:您好,想和您问下,您这篇文章中说的缓存,和本地保存指的是一个意思不?我指的本地保存是保存在document资源目录下,而不是tmp这个目录下。
    无夜之星辰:@三创iOS和PHP开发 是的,就跟保存到本地差不多,只不过我这个更像是保存到一个临时数组里,属性数组没有保存到NSUserDefaults里。
    三创iOS和PHP开发:@无夜之星辰 了解,那其实是和将一些信息保存到本地差不多的情况?您的属性数组是保存在权句柄(NSUserDefaults )里面么?
    无夜之星辰:我这个只是简单的把请求过的数据模型放到一个属性数组里面:smile:
  • 否极泰来_L:我感觉应该先展示缓存,但是也要同时请求网络更新缓存,然后更新UI,或者相隔多长时间请求一次网络。
    无夜之星辰:可以,你们这种可以说是比较成熟的缓存方案了。
  • CepheusSun:如果这是push出来的页面,然后pop回去了,这时候在push回来,这种情况下,重复请求往往也是没什么意义的事情。这种情况下设置缓存时间,将请求结果放在本地。我觉得更好啊。所以我觉得这个东西还是应该交给网络layer最好。最好问问偶像还有锤师傅,他们有更好的实践:yum: @moonCoder @水瓶座iOSer 毕竟他们也是自己搞过这种业务的
    moonCoder:门徒师傅研究得很细致
    A天天涨不停:根据需求而定,像这种更新不频繁的数据量大的,缓存是最好的,pop,在push加不加缓存无所谓,像这种同一个页面切换不同的View更新cell之类的,最好是缓存。而且这商品数据量多比较大,可以考虑加一个最大缓存限制防止内存不足。也或者采用本地DB方式,我们的列子有一个房地产APP,就是采用本地DB方式,服务器不做任何逻辑,直接download DB,然后采取定时更新或者及时更新等其他策略和服务器同步DB。
    无夜之星辰:@CepheusSun 门徒师傅研究得很细致:sunglasses:
  • _Andy_:和我的缓存思路一样。 不过我是把网络请求封装了缓存。
    无夜之星辰:@大苏Andi nice,多谢分享:sunglasses:
    _Andy_:@无夜之星辰 是的 存的本地文件 这里有写 http://www.jianshu.com/p/55cda3341d11 欢迎多多交流
    无夜之星辰:@大苏Andi 是把请求的结果放在的本地么
  • 8870:那如果点击的时候如果有缓存,但是恰巧服务器更新了数据,这展示的数据就不是最新的了
    无夜之星辰:@PGOne爱吃饺子 最近在重构,想问下你们服务器数据更新后是怎么处理的?是单独请求的一个接口表示服务器是否数据更新吗?
    PGOne爱吃饺子:最好不要这么做,服务器数据更新了话就不好了
    无夜之星辰:@8870 是的,不过我们可以下拉刷新:joy:
  • 因幡白兔:先mark再来评论 kuaishifu is kuaishifu 一如既往地666
    无夜之星辰:@因幡白兔 终于有点赞了,多谢你给我挽尊啊

本文标题:iOS开发缓存的实际运用:避免多余的数据请求

本文链接:https://www.haomeiwen.com/subject/tnsnbxtx.html