В Java вы можете приостановить выполнение текущего потока в течение некоторого времени с помощью Thread.sleep(). Есть ли что-то подобное в Objective C?
Что эквивалентно Java Thread.sleep() в Objective-C/Cocoa?
Ответ 1
Да, там + [NSThread sleepForTimeInterval:]
(Именно поэтому вы знаете, что для будущих вопросов Objective C - это сам язык, а библиотека объектов (по крайней мере одна из них) - Cocoa.)
Ответ 2
Спящий режим для одной секунды в Java:
Thread.sleep(1000);
Сон для секунды в Objective C:
[NSThread sleepForTimeInterval:1.0f];
Ответ 3
Почему ты спишь? Когда вы спите, вы блокируете пользовательский интерфейс, а также загрузку любого фонового URL-адреса не в других потоках (с использованием асинхронных методов NSURL по-прежнему работает текущий поток).
Скорее всего, вам нужно выполнить функцию Selectlect: withObject: AfterDelay. Этот метод в NSObject, который вы можете использовать для вызова метода в некоторый заранее определенный интервал позже - он планирует вызов, который будет выполняться позднее, но все остальные элементы, обрабатываемые потоком (например, пользовательский интерфейс и загрузка данных), будут продолжаются.
Ответ 4
Конечно, вы также можете использовать стандартные вызовы Unix sleep() и usleep(). (Если вы пишете Cocoa, я бы остался с [NSThread sleepForTimeInterval:].)
Ответ 5
Если вы используете 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];
}
}
Ответ 6
usleep() также может использоваться в качестве ive, используемого для временного приостановки текущего потока