Я нахожусь в такой ситуации ... Я хочу пропатчить 100 различных веб-запросов, но они разделены на три разные функции:
-(void)functionMain {
for(int i = 0; i < 100; i++)
[self sendRequestToServer];
}
Так что первая функция в основном отправит запрос некоторымURL и дождитесь его завершения ...
-(void)sendRequestToServer {
[request sendRequest:mAddress];
[request didFinishSelector:@"refreshAddress"];
[request startAsynchronous];
}
Эта функция выше будет выполнять фактическую отправку адреса.
-(void)refreshAddress {
NSString *result = [request getResponse];
mAddress = [result getTheNextAddress];
[self refreshDisplay];
}
Теперь это установит mAddress на следующий веб-адрес,Итак, я получил много этого, и, очевидно, один запрос занимает немного времени (около 600 мс), но если вы заметите в основном цикле в functionMain
, у меня нет никакого механизма, чтобы увидеть, имеет ли refreshAddress
закончил свою работу, потому что если этого не произошло, то я буду отправлять запрос с одним и тем же адресом снова и снова.
Я пытался использовать логическую переменную для защиты цикла, но он не выглядиткак будто это работает ... Есть ли изящный способ сделать это?Я не уверен, что я должен искать .. Я не знаю, помогут ли мне NSOperation
или NSThread
.
РЕДАКТИРОВАТЬ: Как я уже упоминал в комментарии, это, вероятно, больше похоже на меняУ меня здесь ситуация с многопоточностью (точнее, это может быть 100 потоков), которую я хочу превратить в один поток.
РЕДАКТИРОВАТЬ: Итак, что я действительно хочу, так это (предположим, циклтолько 3):
functionMain(i = 0) ->
sendRequestToServer
Затем мы ждем, пока это не закончится, тогда у нас есть это:
refreshAddress (mAddress has been set to something else now) ->
functionMain (i = 1) ->
sendRequestToServer
Еще раз:
refreshAddress (mAddress has been set to something else now) ->
functionMain (i = 2, finished)
Очень, очень жальесли я не могу описать проблему более четко ... Я бы хотел лучше писать по-английски и описывать вещи более четко!