Цель C эквивалентна javascripts setTimeout? - PullRequest
25 голосов
/ 16 сентября 2009

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

Ответы [ 4 ]

42 голосов
/ 02 июня 2013

PerforSelector: семейство имеет свои ограничения. Вот ближайший эквивалент 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):

32 голосов
/ 16 сентября 2009

Есть несколько вариантов.

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

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

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

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

12 голосов
/ 16 сентября 2009

Взгляните на класс 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!");
}
3 голосов
/ 16 сентября 2009
+[NSTimer scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:]

Документация

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...