2010-07-19 2 views
7

если я создал runloop подобное:Как остановить таймер, запускаемый runloop?

NSRunloop* loop = [NSRunloop currentRunLoop]; 
[runLoop addTimer:anyTimer forMode:NSDefaultRunLoopMode]; 

может я остановить его снова? или это единственный способ игнорировать уведомление, которое я использую для запуска дальнейших действий?

нормально, я не приведу пример для задачи:

-(void)blinkeffekt:(double)pollingTime{ 

NSRunLoop* runLoop = [NSRunLoop currentRunLoop]; 

if (pollingTime != 0) { 
    NSTimeInterval interval =(double)pollingTime/1000; 
    NSTimer timer = [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(polling) userInfo:nil repeats:YES]; 
    [runLoop addTimer:timer forMode:NSDefaultRunLoopMode]; 
} 
else { 

    [timer invalidate]; 
} 

}

, конечно, вот несколько ошибок - не вопрос. но я думаю, это показывает мою проблему. и до сих пор это не разрешимо с ответами.

Мне нужно запустить таймер и остановить его позже. и в идеале - из другой функции в классе. , но тогда я больше не могу получить доступ к «таймеру», а runloop не позволяет определить, есть ли такое «сообщение». , и это было бы крайне неэффективно, если бы я зарегистрировал для каждого вызова функции новый таймер.

ответ

19

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

See Doc

[anyTimer invalidate]; 
+0

там раньше, я должен был связать таймер с объектом, что я не потерять ссылку. но да, поэтому он работает – nico

Смежные вопросы