Ответы:
Да, есть + [NSThread sleepForTimeInterval:]
(Чтобы вы знали, на вопросы в будущем, Objective-C - это сам язык; библиотека объектов (по крайней мере, один из них) - это Cocoa.)
Сон в течение одной секунды на Java:
Thread.sleep(1000);
Сон в течение одной секунды в цели C:
[NSThread sleepForTimeInterval:1.0f];
Почему ты спишь? Когда вы спите, вы блокируете пользовательский интерфейс, а также любую фоновую загрузку URL-адресов не в других потоках (асинхронные методы NSURL по-прежнему работают в текущем потоке).
Скорее всего, вы действительно хотите выполнитьSelector: withObject: AfterDelay. Это метод в NSObject, который вы можете использовать для вызова метода через некоторый заранее заданный интервал позже - он планирует вызов, который будет выполнен позже, но все остальные вещи, которые обрабатывает поток (например, пользовательский интерфейс и загрузка данных), будут все еще продолжаем.
Конечно, вы также можете использовать стандартные вызовы Unix sleep () и usleep (). (Однако при написании Cocoa я бы остановился на [NSThread sleepForTimeInterval:].)
Если вы используете NSThread sleepForTimeInterval (код с комментариями) для сна, выборка данных будет заблокирована, но + [NSThread sleepForTimeInterval:] (метод checkLoad) не будет блокировать выборку данных.
Мой пример кода, как показано ниже:
- (void)viewDidAppear:(BOOL)animated
{
//....
//show loader view
[HUD showUIBlockingIndicatorWithText:@"Fetching JSON data"];
// while (_loans == nil || _loans.count == 0)
// {
// [NSThread sleepForTimeInterval:1.0f];
// [self reloadLoansFormApi];
// NSLog(@"sleep ");
// }
[self performSelector:@selector(checkLoad) withObject:self afterDelay:1.0f];
}
-(void) checkLoad
{
[self reloadLoansFormApi];
if (_loans == nil || _loans.count == 0)
{
[self performSelector:@selector(checkLoad) withObject:self afterDelay:1.0f];
} else
{
NSLog(@"size %d", _loans.count);
[self.tableView reloadData];
//hide the loader view
[HUD hideUIBlockingIndicator];
}
}