簡體   English   中英

我想使所有[self performSelector:@selector(showLyrics)withObject:nil afterDelay:2]無效;

[英]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 performSelector無法取消。 編輯:顯然可以取消,請參閱omz的答案...

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM