首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone或Cocoa:处理多个HTTP请求的顺序

iPhone或Cocoa:处理多个HTTP请求的顺序
EN

Stack Overflow用户
提问于 2009-02-13 16:10:48
回答 3查看 1.4K关注 0票数 1

当使用Cocoa/Cocoa-Touch和iPhone开发工具包时,一个典型的约定是构建一个与服务器端web服务器对话的客户端。我在编程时面临的一个常见问题是按顺序发出多个HTTP请求,有时多达5-6个请求。发出请求的顺序与返回请求的顺序不是线性的。当一个视图被带到为其触发这些请求的窗口时,我会收到使用NSNotification的通知,让我知道何时有特定的数据可用。我正在考虑一种方法,它只在所有数据集都准备好时才会触发我的UI。寻找对你的方法的良好实践和洞察力。你在使用互斥锁还是类似的东西?简单的计数器?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-02-13 16:38:45

假设您知道需要发出的所有请求,您可以将各种请求对象存储在一个数组(NSMutableArray)中。当您收到每个请求的通知时,将其从数组中取出。当数组长度等于零时,您知道所有请求都已完成。您需要确保对数组的访问是由互斥锁保护的。您还需要确保仅在填充数组之后才触发请求(以免在将第二个请求插入数组之前收到通知)。

另一种技术是在另一个线程(performSelectorInBackground:performSelector:onThread:)中发出HTTP请求,但它们是同步进行的。这样,您就可以确切地知道所有请求都已完成的时间,并可以对UI执行signal操作以更新自身。

票数 1
EN

Stack Overflow用户

发布于 2009-02-13 17:26:49

您需要在NSHTTPRequest旁边存储一些状态,以便将请求链接到UI (或模型)对象,或者,您必须能够从请求返回的内容中推断出这一点。

codelogic的建议都是这种模式的例子。NSOperation将是另一个。

票数 1
EN

Stack Overflow用户

发布于 2010-01-19 16:38:59

正如codelogic所说,维护独立的数组或字典相当容易。

例如,确保正确初始化字典:

代码语言:javascript
复制
notifications = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
   @"foo", @"bar",
   @"baz", @"bla",
   nil];

然后您可以注册通知(也在初始化器中):

代码语言:javascript
复制
for (NSString *key in notifications)
{
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(entityDidFetch:) name:key object:self];
}

entityDidFetch:方法可能如下所示:

代码语言:javascript
复制
- (void)entityDidFetch:(NSNotification *)notification
{
 @synchronized(notifications)
 {
  NSString *name = [notification name];
  [notifications removeObjectForKey:name];

  if ([notifications count] == 0)
  {
   // Final connection…
  }
 }
}

如果您使用notifications或不使用GC,请不要忘记发布iPhone字典。

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

https://stackoverflow.com/questions/546537

复制
相关文章

相似问题

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