Что эквивалентно Java Thread.sleep () в Objective-C /Cocoa?

В Java вы можете приостановить выполнение текущего потока на некоторое время, используя Thread.sleep (). Есть ли что-то подобное в Objective C?

106 голосов | спросил levi 6 Maypm09 2009, 17:03:33

6 ответов


0

Да, есть + [NSThread sleepForTimeInterval:]

(Точно так же, как вы знаете для будущих вопросов, Objective-C - это сам язык; библиотека объектов (по крайней мере, один из них) - Какао.)

ответил smorgan 6 Maypm09 2009, 17:07:35
0

Спать одну секунду в Java:

Thread.sleep(1000);

Спать в течение одной секунды в Цели C:

[NSThread sleepForTimeInterval:1.0f];
ответил Rok Strniša 30 Mayam13 2013, 00:24:59
0

Почему ты спишь? Когда вы спите, вы блокируете пользовательский интерфейс, а также любую фоновую загрузку URL не в других потоках (использование асинхронных методов NSURL по-прежнему работает в текущем потоке).

Скорее всего, то, что вы действительно хотите - это executeSelector: withObject: AfterDelay. Это метод в NSObject, который вы можете использовать для вызова метода через некоторый заранее заданный интервал позже - он планирует вызов, который будет выполнен позже, но все остальные вещи, которые обрабатывает поток (например, пользовательский интерфейс и загрузка данных), будут все еще продолжайте.

ответил Kendall Helmstetter Gelner 6 Maypm09 2009, 22:55:05
0

Конечно, вы также можете использовать стандартные вызовы Unix sleep () и usleep (). (Если бы я писал Cocoa, я бы остановился на [NSThread sleepForTimeInterval:], однако.)

ответил Bill Heyman 6 Maypm09 2009, 18:27:41
0

Если вы используете 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];
    }
}
ответил wu liang 25 MarpmMon, 25 Mar 2013 12:28:53 +04002013-03-25T12:28:53+04:0012 2013, 12:28:53
0

usleep () также можно использовать, так как я использовал это для временной приостановки текущего потока

ответил j2emanue 24 Jam1000000amThu, 24 Jan 2013 04:48:28 +040013 2013, 04:48:28

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132