Вопрос селектора NSTimer - PullRequest
       15

Вопрос селектора NSTimer

0 голосов
/ 21 сентября 2011

Приветствие !!

У меня есть следующая функция, например:

-(void) doMainBrick
{
    NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval:0.1
                                                       target:self
                                                     selector:@selector(dropBrick:)
                                                     userInfo:nil
                                                    repeats:YES];
}

-(void) dropBrick:(NSTimer*) timex 
{
    //deal something 
   [self SwitchBrick];
}

Интересно, возможно ли это, если функция dropBrick делает больше, чем scheduledTimerWithTimeInterval (вмой образец выше, это 0,1), еще один вызов dropBrick повторяется (каждые 0,1 секунды срабатывает dropBrick, повторяется: ДА)?или что бы то ни было, NSTimer будет ждать последнего конца dropBrick и затем будет запущен?

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

NSTimers запланировано в RunLoop.

Это означает, что на каждой итерации RunLoop система выполняет следующие действия:

  • Проверяет наличие запланированных таймеровза что их время огня истекло.Если это так, запустите связанный метод.
  • Проверьте, есть ли у других источников ввода (например, запланированные сокеты в RunLoop и т. Д.) Входные данные для продолжения, если это так, обработайте их.
  • Проверьте, есть лиожидают события, например события касания, и обрабатывают их (запускают связанные действия)
  • Выполнение рисования
  • Повторная итерация

Как следствие:

  • NSTimer не волнует, если вы сами вызываете dropBrick вручную в дополнение к вызовам, запускаемым самим таймером
  • Если метод, вызванный таймером, занимает больше, чем указанный timeInterval, вВ конце итерации цикла RunLoop метод снова будет запущен немедленно, так как дата запуска следующего вызова уже истекла.
0 голосов
/ 21 сентября 2011

Одна идея, о которой я могу подумать, это ...

Установите Repeat: NO и дайте самому себе рекурсивный вызов dropBrick.Добавьте немного сна, чтобы контролировать частоту рекурсивных вызовов.

...