Я работаю с сетевым запросом - ответ в Objective-C. В асинхронной модели есть что-то, чего я не понимаю.
Таким образом, у меня есть вид, который покажет мои статусы из 2 социальных сетей: Twitter и Facebook. Когда я нажму кнопку «Обновить», он вызовет менеджер моделей. Менеджер этой модели вызовет 2 сервисных помощников для запроса последних товаров. Когда 2 сервисных помощника получают данные, они передаются обратно менеджеру модели, и эта модель добавляет все данные в отсортированный массив.
Что я не понимаю, так это то, что: когда ответ из социальных сетей возвращается, сколько потоков будет обрабатывать ответ. Исходя из моего понимания многопоточности и работы в сети (в Java), 2 потока обрабатывают 2 ответа, и эти 2 потока выполнят код для добавления ответов в массив. Таким образом, это может иметь состояние гонки и программа может пойти не так, не так ли? Это правильная рабочая модель iphone target-C? Или они делают это по-другому, так что у него никогда не будет состояния гонки, и нам не нужно заботиться о блокировке, синхронизации?
Вот мой пример кода:
ModelManager.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 вызывается одновременно. Это означает, что, например, faceboook возвращает 10 элементов, твиттер возвращает 10 элементов, будет ли когда-нибудь результат счета больше 10?
И если существует только один отдельный поток, как поток может завершить синтаксический анализ ответа 1 и перейти к другому ответу, потому что, IMO, поток выполняется только последовательно, блок кода за блоком кода