我正在添加
[self performSelector:@selector(showLyrics) withObject:nil afterDelay:20];
但如果用户重新启动歌曲,则不应执行此选择器。所以我只是想 知道如何取消它。因为在20秒后它会被调用,但我不想这样,并重新安排
[self performSelector:@selector(showLyrics) withObject:nil afterDelay:20];
我很多
[self performSelector:@selector(showLyrics) withObject:nil afterDelay:2];
我想取消之前安排过的所有内容。
答案 0 :(得分:3)
[[NSRunLoop currentRunLoop] cancelPerformSelector:@selector(showLyrics)
target:self
argument:nil];
答案 1 :(得分:2)
您可以使用NSTimer
代替performSelector:withObject:afterDelay:
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(showLyrics) userInfo:nil repeats:NO];
取消:
[timer invalidate];
但您可能希望在每次开始之前使其无效,或者将计时器保留在数组中并迭代它们以取消所有这些。
答案 2 :(得分:0)
使用NSTimer
并保存对其的引用,而不是performSelector
。 Afaik 编辑:显然可以取消,请参阅omz的答案...... performSelector
无法取消。
self.showLyricsTimer = [NSTimer scheduledTimerWithTimeInterval:20.0
target:self
selector:@selector(showLyrics)
userInfo:nil
repeats:NO];
取消您使用的计时器:
[self.showLyricsTimer invalidate];
但是当视图消失时,请注意使计时器无效。在viewWillDisappear
回调中,因为NSTimer
保留了它的目标。
答案 3 :(得分:0)
取消执行先前使用performSelector注册的请求:withObject:afterDelay:
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument
这似乎是你在找什么或者你在寻找什么~~