我使用以下代码在4秒延迟后开始重复NSTimer:
- (void)viewDidLoad {
[self performSelector:@selector(startTimer) withObject:self afterDelay:4];
}
- (void)startTimer {
NSTimer *mytimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(doSomething) userInfo:nil repeats:YES];
}
- (void)doSomething {
NSLog(@"What up!");
}
问题是我可能需要在4秒钟之前取消调用startTimer。有办法做到这一点吗?我实际上更喜欢不首先使用performSelector(看起来很乱)。如果只有NSTimer有这样的东西......
NSTimer * mytimer = [NSTimer scheduledTimerWithTimeInterval:1.0 afterDelay:4.0 target:self 选择器:@selector(doSomething的) userInfo:nil重复:是];
...然后那将是完美的,因为我可以调用以下内容:
[myTimer invalidate];
非常感谢任何帮助或提示=)
P.S。我在NSObject类引用中找到了一个名为cancelPreviousPerformRequestsWithTarget的东西。似乎不是我可以从此代码运行的地方调用的方法。如果这回到了正确的轨道上,欢迎您的反馈!
答案 0 :(得分:21)
Plz浏览SP帖子链接
Stopping a performSelector: from being performed
[NSObject cancelPreviousPerformRequestsWithTarget:self
selector:@selector(sr)
object:nil];
-performSelector的文档:withObject:afterDelay:指向取消排队执行请求的方法。
答案 1 :(得分:1)
[myTimer invalidate]
不起作用?
只需跟踪您班级中的对象,或者在集中式商店中跟踪。
如果您这样做,您可以从任何地方访问您的计时器,并在需要时使其无效
答案 2 :(得分:0)
使用NSTimer解决问题。
self.autoTimer = [NSTimer timerWithTimeInterval:3.0 target:self
selector:@selector(connectionTimeout:) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:autoTimer
forMode:NSDefaultRunLoopMode];
并在您想要停止计时器时调用
[self.autoTimer invalidate];
self.autoTimer = nil;