【问题标题】:how to stop a timer triggered runloop?如何停止计时器触发的运行循环?
【发布时间】:2010-07-19 07:51:42
【问题描述】:

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

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

【问题讨论】:

    标签: iphone objective-c timer nsrunloop


    【解决方案1】:

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

    See Doc

    [anyTimer invalidate];
    

    【讨论】:

    • 在此之前,我必须将计时器绑定到对象,这样我才不会丢失引用。但是是的,所以它有效
    猜你喜欢
    • 2021-07-02
    • 2015-05-17
    • 2021-08-27
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2021-08-20
    • 2012-02-19
    • 1970-01-01
    相关资源
    最近更新 更多