取消排队的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:]
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文档 ,它正好在performSelector:withObject:afterDelay:
的末尾performSelector:withObject:afterDelay:
description。
如果您正在寻找“performSelector”以使其匹配的“cancelPreviousPerformSelector”…它不。 (呃,苹果,你为什么这样对我?)
呃啊,“匹配”方法是:performSelector cancelPreviousPerformRequestsWithTarget
(只是为了使其更难以记住,而不search文档)。
为了取消所有先前的执行请求,您可以使用:
[NSObject cancelPreviousPerformRequestsWithTarget:self];
检查NSRunLoop文档。 你想要-cancelPerformSelectorsWithTarget: