【发布时间】:2010-05-11 02:11:55
【问题描述】:
我正在处理网络请求 - Objective-C 中的响应。异步模型有些东西我不明白。
总之,我有一个视图可以显示我来自 2 个社交网络的状态:Twitter 和 Facebook。当我单击刷新时,它将调用模型管理器。该模型经理将调用 2 个服务助手来请求最新项目。当 2 个服务助手接收到数据时,它将传回模型管理器,该模型会将所有数据添加到排序数组中。
我在这里不明白的是:当来自社交网络的响应回来时,有多少线程将处理响应。根据我对多线程和网络(在 Java 中)的理解,必须有 2 个线程处理 2 个响应,并且这 2 个线程将执行代码以将响应添加到数组中。那么,它可能有竞争条件并且程序可能会出错,对吗?它是 iphone Objective-C 的正确工作模型吗?或者他们以不同的方式做到这一点,它永远不会有竞争条件,我们不必关心锁定、同步?
这是我的示例代码:
模型管理器.m
- (void)updateMyItems:(NSArray *)items {
self.helpers = [self authenticatedHelpersForAction:NCHelperActionGetMyItems];
for (id<NCHelper> helper in self.helpers) {
[helper updateMyItems:items]; // NETWORK request here
}
}
- (void)helper:(id <NCHelper>)helper didReturnItems:(NSArray *)items {
[self helperDidFinishGettingMyItems:items callback:@selector(model:didGetMyItems:)];
break;
}
}
// some private attributes
int *_currentSocialNetworkItemsCount = 0; // to count the number of items of a social network
- (void)helperDidFinishGettingMyItems:(NSArray *)items {
for (Item *item in items) {
_currentSocialNetworkItemsCount ++;
}
NSLog(@"count: %d", _currentSocialNetworkItemsCount);
_currentSocialNetworkItemsCount = 0;
}
请问有没有同时调用方法helperDidFinishGettingMyItems的情况。这意味着,例如,facebook 返回 10 个项目,twitter 返回 10 个项目,count 的输出是否会大于 10?
如果只有一个线程,线程如何完成解析 1 个响应并跳转到另一个响应,因为,IMO,线程只是按顺序执行,逐个代码块
【问题讨论】:
标签: iphone objective-c multithreading asynchronous