我试图使用以下代码停止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];
}
但计时器不会停止。有谁知道我做错了什么?
答案 0 :(得分:4)
您需要在创建计时器的类的同一实例上调用invalidate
方法。在您的timer
方法中,您创建了一个类的新实例,该实例可能有自己的计时器并使其无效。
答案 1 :(得分:1)
我对你在这里尝试做的事感到困惑,但我猜你没有保留对timer3的引用。
您是否在.h文件中为计时器创建了一个属性:
@property (strong) NSTimer *timer3;
然后在.m文件中添加了一个合成语句:
@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还有一个有效的解决方案来解决可能影响你的问题..