[英]Cancel [self performSelector:… withObject:nil afterDelay:20];
[英]I want to invalidate all [self performSelector:@selector(showLyrics) withObject:nil afterDelay:2];
我正在添加
[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];
我想取消所有我之前安排的活動。
[[NSRunLoop currentRunLoop] cancelPerformSelector:@selector(showLyrics)
target:self
argument:nil];
您可以使用NSTimer
代替performSelector:withObject:afterDelay:
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(showLyrics) userInfo:nil repeats:NO];
取消:
[timer invalidate];
但是您可能希望在每次啟動之前使它們無效,或者將計時器保留在數組中並對其進行迭代以取消所有計時器。
使用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
保留了它的目標。
取消先前已通過performSelector:withObject:afterDelay注冊的執行請求:
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument
看來這就是您要尋找的或您正在尋找的~~
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.