NSTimer无效不会停止计时器

时间:2015-02-09 13:04:34

标签: ios cocoa

-(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次我想要停止计时器但它没有停止它仍在继续。

2 个答案:

答案 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的代码可以解决问题。

希望清楚。