2

我正在尝试使用以下代码停止 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];
}

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

4

2 回答 2

4

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

于 2012-06-24T19:14:21.947 回答
1

我对您在这里尝试做的事情感到有些困惑,但我猜您没有维护对 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 还为可能影响您的问题提供了有效的解决方案。

于 2012-06-24T19:16:01.513 回答