Подтвердить что ты не робот

Объект C, эквивалентный javascripts setTimeout?

Мне было интересно, есть ли решение поднять событие один раз через 30 секунд или каждые 30 секунд в CocoaTouch ObjectiveC.

4b9b3361

Ответ 1

Существует несколько вариантов.

Самый быстрый в использовании - NSObject:

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay

(Есть несколько других с небольшими вариациями.)

Если вам нужно больше контроля или уметь говорить, отправляйте это сообщение каждые тридцать секунд, вам, вероятно, понадобится NSTimer.

Ответ 2

Функция PerformSelector: имеет свои ограничения. Вот ближайший эквивалент setTimeout:

dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * 0.5);
dispatch_after(delay, dispatch_get_main_queue(), ^(void){
    // do work in the UI thread here
});

EDIT: Несколько проектов, которые обеспечивают синтаксический сахар и возможность отмены выполнения (clearTimeout):

Ответ 3

Взгляните на NSTimer класс:

NSTimer *timer;
...
timer = [[NSTimer scheduledTimerWithTimeInterval:30.0 target:self selector:@selector(thisMethodGetsFiredOnceEveryThirtySeconds:) userInfo:nil repeats:YES] retain];
[timer fire];

В другом месте у вас есть фактический метод, который обрабатывает событие:

- (void) thisMethodGetsFiredOnceEveryThirtySeconds:(id)sender {
   NSLog(@"fired!");
}

Ответ 4

+[NSTimer scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:]

Documentation

Вы также можете посмотреть другие методы NSTimer