首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待相同API响应的多个对象

等待相同API响应的多个对象
EN

Stack Overflow用户
提问于 2015-08-20 23:00:34
回答 2查看 379关注 0票数 0

我有一个API代码,它加载应用程序所需的数据。很简单,就像:

代码语言:javascript
复制
- (void) getDataForKey:(NSString*) key onSuccess:(id (^)())completionBlock

我缓存从服务器返回的数据,因此该函数的下一次调用不应该执行网络请求,除非对给定的密钥缺少一些数据,否则我需要从服务器端再次加载它。

只要我每个屏幕都有一个请求,一切都没问题,但现在我有一个案例,我需要对一个屏幕上的每个单元都这样做。问题是我的缓存无法工作,因为在响应从第一个响应进入之前,会同时创建5-6个响应。

在这里,有什么解决方案可以不创建多个网络请求并进行其他呼叫等待第一个网络请求呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-21 04:04:03

您可以尝试创建一个RequestManager类。使用字典缓存请求。

  1. 如果下一个请求与第一个请求的类型相同,则不要发出新请求,而是返回第一个请求。如果选择此解决方案,则需要管理completionBlock列表,然后才能将结果发送给所有请求者。
  2. 如果下一个请求与第一个请求的类型相同,则在另一个线程中等待,直到第一个线程完成。然后提出一个新的请求,您的API将自动读取缓存。你必须确保你的代码是线程安全的。

或者您可以使用操作队列来执行此操作。一些文件:

Apple:操作队列

如何使用NSOperations和NSOperationQueues

票数 1
EN

Stack Overflow用户

发布于 2015-08-21 06:48:26

也许会有这么多耗时的解决方案。我有个窍门。在AppDelegate中创建BOOL,其缺省值为FALSE。当您收到第一个响应时,将其设置为TRUE。因此,当您转到另一个屏幕,在发出请求之前,只需在if条件下检查BOOL变量的值。如果它的真实意思是收到了响应,那么就去做,否则不要做任何事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32129831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档