取消排队的performSelector:afterDelay调用

有没有人知道是否有可能取消事件堆栈或定时器堆栈(或任何机制是由API使用的)已排队的select器事件当您调用performSelector:withObject:afterDelay

我正在使用这个事件堆栈来改变一个TabBar选项卡中的图像的属性,有时会排队等待10秒的变化在一个快速执行循环…也许5毫秒左右。

问题出现,如果用户切换标签…就像说,我有图像更改排队显示图像,只要选项卡#4启用,然后用户快速切换到标签#3,然后右转回到制表符#4 …这将重新排队10秒的价值改变,而旧的队列仍然在播放,大概在2或3秒的队列中,如果切换足够快…但即使到达5秒钟到stream是一个问题。

所以我需要一些方法来取消旧堆栈的变化之前,把一个新的堆栈…

我正在写这个查询过去式,因为我已经想出了一个替代解决scheme来解决这个问题,在播放函数中添加一个鹰眼事件filter。 但是如果事件取消是可能的,我仍然很好奇,因为我有一种感觉,这样的知识将在未来派上用场。 感谢您提供的任何援助:)

 [NSObject cancelPreviousPerformRequestsWithTarget:] 

要么

 [NSObject cancelPreviousPerformRequestsWithTarget:selector:object:] 

targetperformSelector: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文档 ,它正好在performSelector:withObject:afterDelay:的末尾performSelector:withObject:afterDelay: description。

如果您正在寻找“performSelector”以使其匹配的“cancelPreviousPerformSelector”…它不。 (呃,苹果,你为什么这样对我?)

呃啊,“匹配”方法是:performSelector cancelPreviousPerformRequestsWithTarget

(只是为了使其更难以记住,而不search文档)。

为了取消所有先前的执行请求,您可以使用:

 [NSObject cancelPreviousPerformRequestsWithTarget:self]; 

检查NSRunLoop文档。 你想要-cancelPerformSelectorsWithTarget: