我想每500毫秒执行一段代码,总共10秒钟。我用这段代码
让代码每隔半秒执行一次[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(getLevel:) userInfo:nil repeats: YES];
但我似乎无法弄清楚如何在10秒后停止执行。 “重复”参数似乎不允许指定的时间。 有人能指出我应该去哪里的方向吗?
由于 布赖恩
答案 0 :(得分:5)
你需要在NSTimer上发送消息invalidate
scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:给你。例如,在您的类的属性或iVar中指定方法返回给您的NSTimer,并在10秒后调用它上的invalidate
。
示例:
·H:
@interface myClass{
NSTimer *myT;
}
[...]
的.m:
[...]
{
myT = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(getLevel:) userInfo:nil repeats: YES];
[NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(stop) userInfo:nil repeats:NO];
}
-(void)stop{
[myT invalidate];
}
[...]
如果您希望通过实施某种NSTimer
标记并跟踪您向finish
方法发送的次数,可以避免使用其他getLevel
,因为它是每0.5秒一次,即'将是20次。
但是我宁愿2 NSTimer
个对象,因为你知道它是10秒而不管另一个计时器,你可能决定改变它,频率上升或下降......
答案 1 :(得分:1)
最好的办法是在课堂上制作一个属性。
@property (nonatomic, strong) NSTimer *timer;
@property (nonatomic, strong) int ticks;
然后在你的getLevel选择器中调用:
if (ticks >= 20) [self.timer invalidate];
// 20 is 10 seconds * 500 milliseconds
ticks++;
答案 2 :(得分:1)
另一种方法是定义一个选择器,比如-(void)stopTimer{}
其中您使计时器无效。然后,当您首先创建Timer时,请执行以下操作之一:
[self performSelector:@selector(stopTimer) withObject:nil afterDelay:10.0];
答案 3 :(得分:0)
您可以使用invalidate设置另一个计时器来停止它。只需在ivar或属性中保留此计时器的参考。
查看此answer以获取更多信息。