Это вообще хорошая идея - позвонить - [NSRunLoop runUntilDate:]
? Кажется, он работает без каких-либо проблем, но я нервничаю, когда говорю, что цикл выполнения запускается из цикла выполнения.
Дополнительная информация:
У меня сейчас есть проект, который извлекает данные из службы REST. Одна критическая информация, которую необходимо получить, - это диапазон дат с достоверными данными. Это очень маленький бит данных, который нужно получить только один раз, поэтому я решил, что лучший способ справиться с этим - это заставить свойство загружать данные, если локальная переменная nil
. Я' m, используя ASIHTTPRequest
и ASINetworkQueue
, поэтому по умолчанию все асинхронно, и для того, чтобы это работало, это свойство не может возвращаться, пока данные не будут загружены и обработаны. Вот набросок моего кода, имена переменных были изменены для защиты невиновных:
__block BOOL isWorking = YES;
__block ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:/*actual URL*/] autorelease];
[request setCompletionBlock:^{
// set local variable
isWorking = NO;
}];
[request setFailedBlock:^{
// show alert to user
isWorking = NO;
}];
[queue addOperation:request];
while (isWorking) {
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
}
Опять же, похоже, все работает нормально. Есть ли какие-либо потенциальные проблемы при использовании этого подхода?