10

如果我像这样设置一个运行循环:

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不允许弄清楚,如果这样的“消息”可用。如果我为函数的每次调用注册一个新计时器,那将是非常无效的。

4

1 回答 1

29

您需要向计时器发送无效消息以将其从 RunLoop 中删除。

见文档

[anyTimer invalidate];
于 2010-07-19T08:07:47.650 回答