我正在使用Objective-C中的网络请求-响应。有一些异步模型我不理解。
总之,我有一个视图可以显示我在twitter和facebook两个社交网络中的状态。当我单击刷新时,它将调用模型管理器。该模型管理器将调用2个服务助手来请求最新的项目。当2个服务助手接收到数据时,它将传回模型管理器,并且此模型将把所有数据添加到一个排序的数组中。
我不明白的是:当来自社交网络的响应恢复时,有多少线程可以处理响应。根据我对多线程和网络(Java)的理解,必须有2个线程处理2个响应,而这2个线程将执行代码来向数组中添加响应。所以,它可能有比赛条件,程序可能出错,对吗?它是iPhone Objective-C的正确工作模式吗?或者他们以一种不同的方式来做,它永远不会有竞争条件,我们不需要关心锁定、同步?
下面是我的示例代码:
模型管理器
- (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;
}
我想问一下,是否存在同时调用helperdifinishingMyitems方法的情况。这意味着,例如,facebook返回10个项目,twitter返回10个项目,count的输出将永远大于10吗?
如果只有一个线程,那么线程如何完成对1个响应的解析并跳转到另一个响应,因为IMO,线程只能连续执行,一块一块地执行代码