【问题标题】:NSTimer not stopping?NSTimer 没有停止?
【发布时间】:2012-06-24 19:09:06
【问题描述】:

我正在尝试使用以下代码停止 NSTimer:

- (void)viewDidLoad
{
    [super viewDidLoad];
    timer3 = [NSTimer timerWithTimeInterval:5.0 target:self selector:@selector(start) userInfo:nil repeats:YES];
    [[NSRunLoop mainRunLoop] addTimer:timer3 forMode:NSDefaultRunLoopMode];
}

-(void)invalidate
{  
    [timer3 invalidate];
    timer3 = nil; 
}

我从另一个班级打电话给-(void)invalidate,像这样:

-(void)timer
{
    ClassOfMyTimer *class = [[ClassOfMyTimer alloc] init];
    [class invalidate];
}

但计时器不会停止。有谁知道我做错了什么?

【问题讨论】:

    标签: iphone xcode nstimer nsrunloop


    【解决方案1】:

    您需要在创建计时器的类的同一实例上调用您的invalidate 方法。在您的 timer 方法中,您可以创建一个新的类实例,该实例可以有自己的计时器并使之无效。

    【讨论】:

      【解决方案2】:

      我对您在此处尝试执行的操作感到有些困惑,但我猜您并未维护对 timer3 的引用。

      您是否在 .h 文件中为计时器创建了属性:

      @property (strong) NSTimer *timer3;
      

      然后在.m文件中添加了synthesize语句:

      @synthesize timer3;
      

      然后,在 viewDidLoad: 中,您可以通过以下方式维护对您正在创建的计时器的引用:

      self.timer3 = [[[NSTimer timerWithTimeInterval:5.0 target:self selector:@selector(start) userInfo:nil repeats:YES];
      

      [[NSRunLoop mainRunLoop] addTimer:self.timer3 forMode:NSDefaultRunLoopMode];

      并且,稍后使计时器无效:

      [self.timer3 invalidate]
      self.timer3 = nil
      

      在预览版中,Sven 还针对可能影响您的问题提供了有效的解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-30
        • 2010-11-05
        • 2015-12-08
        • 2011-03-31
        • 1970-01-01
        相关资源
        最近更新 更多