以下代码有效地调度延迟的选择器调用,并且还有效地取消所有挂起的调度调用。不使用自我调用performSelector NSObject实例
[self performSelector:@selector(triggerUpdateForNSIndexPath:)
withObject:indexPath
afterDelay:triggerIn];
[NSObject cancelPreviousPerformRequestsWithTarget:self];
此外,以下代码调度withObject的选择器并取消该特定的预定选择器withObject。
[self performSelector:@selector(triggerUpdateForNSIndexPath:)
withObject:indexPath
afterDelay:triggerIn];
[NSObject cancelPreviousPerformRequestsWithTarget:self
selector:@selector(triggerUpdateForNSIndexPath:)
object:indexPath];
我的问题是,这是使用self
的目标,这意味着与我的选择方法triggerUpdateForNSIndexPath
任何其他排定呼叫无将由[NSObject cancelPreviousPerformRequestsWithTarget:self];
被取消。我试图将self
更改为NSObject
实例,但选择器从未被触发。
如何控制预定选择器而无需知道确切的withObject
?我创建一个NSObject
实例替换使用self
似乎是有道理的,但我想我离开...
基本上我的担心是,在我的代码将来我会调用performSelector延迟为特定的选择器并且电话[NSObject cancelPreviousPerformRequestsWithTarget:self];
将在它不相关时取消。这会引入一个我想避免的丑陋的错误。
使用'NSTimer',你可以在必要时使'invalidate'失效吗? – trojanfoe 2014-09-03 14:56:51
嘿@trojanfoe你其实是对的。我需要使用NSTimer。我将使用它并将预定的NSTimers保存在一个数组中,以便我可以轻松取消所有预定的NSTimers。我是iOS新手,所以我不明白有些事情是如何工作的。 :) – Jona 2014-09-03 16:10:31