2014-02-10 2 views
0

Я создал простой одноплодный и запустить метод в нем:Mac OS, консольное приложение. performSelector: withObject: afterDelay: не работает?

- (void)run { 

    static int times = 0; 
    NSLog(@"times = %d", times++); 

    [self performSelector:@selector(run) withObject:nil afterDelay:MIN_DELAY]; 
} 

Но это не работает должным образом. Он выполняется только один раз.

Но если я заменил performSelector:withObject:afterDelay: на performSelector:, тогда это будет называться много раз (но мне нужна задержка между вызовами).

Так почему же метод performSelector:withObject:afterDelay: не работает? И могу ли я использовать этот метод вообще?

ответ

3

Звонки на -performSelector:withObject:afterDelay: требуют выполнения цикла. Консольные приложения по умолчанию не пропускают управление в цикл выполнения. Для получения дополнительной информации, найдите NSRunLoop.

3

Из документов:

Этот метод регистрирует с runloop его текущего контекста, и зависит от того, что runloop выполняется на регулярной основе, чтобы правильно выполнять.

У вас нет runloop. Ipso facto, этот метод не работает правильно для вас.

(Создание и запуск runloop является одной из вещей, что вызов UIApplicationMain делает, но, конечно, вы никогда не призывающих его.)