使NSTimer无效并创建

时间:2013-02-23 14:11:07

标签: ios nstimer intervals

每当我完成我的NSTimer时,我想让它失效并创建一个新的间隔,但它保持旧的间隔以及新的间隔。单击offButton后,我想使NSTimes无效。计时器停止打印“工作”但是当我用不同的间隔调用我的方法时,它会为两个间隔打印“工作”。

我的代码是这样的:

-(void) fireTimer{
    NSString *textValue = [sliderLabel text];
    float value = [textValue floatValue];

    [NSTimer scheduledTimerWithTimeInterval:value target:self selector:@selector(vibrate:) userInfo:nil repeats:YES];

}

- (void) vibrate:(NSTimer*)timer {
    if(_offButton.selected){
        [timer invalidate];
        timer=nil;
    }

    NSLog(@"Working");


}

2 个答案:

答案 0 :(得分:3)

  1. 您不是通过直接从UITextField获取值来遵循MVC设计模式。这些值应存储在模型对象中,MVC模式用于从文本字段中获取任何新值到模型中。您当前的实施非常精细,并且会在最轻微的微风中打破。它还要求此代码可以访问UI元素,这非常不灵活;最好让它只访问模型对象。

  2. NSTimer *存储为实例变量,请注意,如果您使用ARC,则NSTimer 会保留目标(!!),因此请将此设置为实例变量__weak打破保留周期。

  3. 如果您希望计时器重复,则根本不需要重置计时器;只有在用户更改时间时才需要这样做(参见第1点!)。

  4. if (button_selected) do_vibrate;代码移至计时器触发方法。

答案 1 :(得分:1)

您自己使用的失效代码是正确的。但是你可以更容易地将你的计时器作为ivar或财产引用。

在这种情况下,你肯定会避免制作一个计时器的多个实例。