-(void)DataShow
{
for(k=1;k<=10;k++)
{
Timer=[NSTimer scheduledTimerWithTimeInterval:1 target:self
selector:@selector(LabelUpdateOfTimer) userInfo:nil
repeats:YES];
if(k>=10)
{
break;
}
}
[Timer invalidate];
Timer=nil;
}
-(void)LabelUpdateOfTimer
{
NSString *temp;
j=j-0.1;
temp=[[NSString alloc]initWithFormat:@" %f",j];
TimerLabel.text=temp;
}
这里我创建了一个计时器,当它执行了10次我想要停止计时器但它没有停止它仍在继续。
答案 0 :(得分:5)
在for
循环中,您创建了10个计时器,每个k
增量为1个。如果您希望定时器仅触发10次,则可以在定时器调用的选择器内跟踪它。
- (void) someMethod
{
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];
}
- (void) timerFireMethod:(NSTimer *)timer
{
static NSInteger fireCount = 0;
++fireCount;
if(10 <= fireCount)
[timer invalidate];
// Do some actual work
}
我建议阅读C控制结构的基本介绍,以便更好地理解语言语法。
答案 1 :(得分:1)
我会解释一下我的想法。如果我错了,请随意纠正我。
想象一下Timer
变量是一个皮带。当你产卵时,它会与皮带绑在一起。当一个新的产生时,皮带从旧狗身上释放出来并绑定新的狗。老狗被释放,除非我们已将它绑定到另一条皮带(variable
),否则我们无法从此处控制或访问它。
您所做的是触发10个NSTimer变量并分配给Timer
变量。每次创建一个新的时间时,Timer
之前保持的计时器都会从变量中删除,但仍然会继续在我认为的后台运行。
然后在for
循环之外,使最后一个循环失效(仍由Timer
变量保持)。其他9将继续永远运行,除非你可以获得它们的引用,然后停止它,你不能。摆脱循环并启动一个计时器。并检查选择器内部调用的次数。 @sbooth的代码可以解决问题。
希望清楚。