我想设置一个具有不断变化的延迟的计时器,该计时器存储在一个变量中。如果我在计时器中设置一个计时器来更新它根本不起作用的延迟,我该怎么做呢? 感谢
答案 0 :(得分:2)
没有重复计时器。使用一次运行计时器,当它完成/运行时,使用新的延迟创建另一个计时器。
或者......正如@Steve Wilford在他的回答中所说,在NSTimer上使用setFireDate:从文档“调整单个计时器的触发时间可能会比创建多个计时器对象产生更少的费用,在运行循环上安排每个计时器,然后销毁它们。”
答案 1 :(得分:1)
在班级界面中使用
@interface YourClass : SuperClass <Delegates> {
NSTimer *yourTimer;
NSInteger delay;
}
当您设置计时器时,请确保设置
delay = 1.0;
yourTimer = [NSTimer scheduledTimerWithTimeInterval:delay target:self selector:@selector(methodToCall) userInfo:nil repeats:false];
最后在你的methodToCall
-(void)methodToCall {
// Do stuff and reset timer with delay variable
yourTimer = [NSTimer scheduledTimerWithTimeInterval:delay target:self selector:@selector(methodToCall) userInfo:nil repeats:false];
}
这意味着计时器必须向下运行才能再次开始运行,如果你想要一些更新的延迟,那么这可能不是你所追求的解决方案,但改变delay
将意味着当如果计时器耗尽,它将以新的延迟重新开始
这仍然允许你调用[yourTimer invalidate]
而没有重复的没有指针的计时器
希望有帮助,或者可能会指出您正在寻找的解决方案
答案 2 :(得分:0)
NSTimer
的{{3}}方法可能有用吗?
请注意,这是一个“相对昂贵”的操作,因此您应该考虑这是否实际上是您想要做的。
答案 3 :(得分:0)
bandejapaisa有正确的想法,但你可能需要从主线程创建新的计时器。使用:
[self performSelectorOnMainThread:<#(SEL)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>]
创建新计时器。