【发布时间】:2014-01-30 05:26:07
【问题描述】:
所以我有一个应用程序,当用户触摸某个对象时,我会通过延迟启动一个选择器。我不确定我想要或需要延迟,但不确定最佳实践,也许是排队?不管怎样,这就是我需要的,不管我现在有什么。
我现在拥有什么
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(doSomething) object:self];
[self performSelector:@selector(doSomething) withObject:nil afterDelay:2.0];
当用户触摸某个对象时,我需要启动一个方法,但如果他/她再次触摸该对象,我不想调用该方法。
用例 #1:
- 用户触摸对象
- 用户在 2 秒内什么都不做
- 呼叫选择器
用例 #2:
- 然后用户触摸对象
- 用户在 0.5 秒后触摸对象(因此取消选择器调用)
- 用户在 0.3 秒后触摸对象(因此取消选择器调用)
- 用户在 0.9 秒后触摸对象(因此取消选择器调用)
- 用户在 2 秒内没有触摸任何东西
- 呼叫选择器
如果觉得 performSelector 和 cancelPrevious 很老套。我是否应该使用某种队列,然后每次用户再次触摸时清除队列?
或者我应该使用计时器,每次用户触摸它时重新启动计时器?
【问题讨论】:
-
虽然我认为计时器是 peformselector 在下面做的。
-
我建议您使用 timer 和一些 boolean flag。该方法在两秒后触发,即当计时器关闭时。
-
是的,你是对的。使用在每次点击时切换其值的布尔标志。并且仅当标志为真时才在方法中执行操作。
标签: ios objective-c performselector