取消排队的performSelector:afterDelay调用


115

有没有人知道在调用时是否可以从事件堆栈或计时器堆栈(或API使用的任何机制)中取消已排队的选择器事件performSelector:withObject:afterDelay

我正在使用此事件堆栈来更改TabBar选项卡中图像的属性,有时在一次快速执行的循环中可能需要排队长达10秒钟的更改,价值可能长达10秒钟……大约5毫秒左右。

如果用户切换选项卡,就会出现问题...就像说我让启用了选项卡#4的图像更改排队等待显示的图像,然后用户迅速切换到选项卡#3,然后又回到选项卡#4 ...这会在旧队列仍在播放时重新排入10秒钟的变更队列,如果切换得足够快的话,可能会排入队列约2或3秒钟...但甚至到达5秒钟流是个问题。

所以我需要一些方法来取消旧的更改堆栈,然后再放上新的堆栈...

我用过去时来编写此查询,因为我已经通过在播放功能上添加鹰眼事件过滤器来解决此问题,并提出了另一种解决方案。但是我仍然对是否可以取消事件感到好奇,因为我感觉这种知识将来会派上用场。感谢您提供的任何帮助:)


您如何在播放功能上使用鹰眼事件过滤器?
Maniganda saravanan 2014年

Answers:


241
[NSObject cancelPreviousPerformRequestsWithTarget:]

要么

[NSObject cancelPreviousPerformRequestsWithTarget:selector:object:]

target是其原始对象performSelector:afterDelay:被调用。

例如:

// schedule the selector
[self performSelector:@selector(mySel:) withObject:nil afterDelay:5.0];
// cancel the above call (and any others on self)
[NSObject cancelPreviousPerformRequestsWithTarget:self];

请参阅apple docs,它位于performSelector:withObject:afterDelay:描述的末尾。


33
有关其用法的一些说明,请尝试以下操作:[NSObject cancelPreviousPerformRequestsWithTarget:self];
dnstevenson 2011年

[NSObject cancelPreviousPerformRequestsWithTarget:自我选择器:@selector(mySel :)对象:无];
webtrick101


2

如果您要查找“ performSelector”使其具有匹配的“ cancelPreviousPerformSelector” ...,则没有。(U,苹果,你为什么要对我这样做?)

嗯,“匹配”方法是:

performSelector

cancelPreviousPerformRequestsWithTarget

(只是使它很难记住,而无需搜索文档。)


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.