所以我有一个应用程序,当用户触摸某个对象时,我会通过延迟启动选择器。我不确定我是否想要或需要延迟,但我不确定最佳做法,也许是队列?无论如何,无论我现在有什么,这都是我需要的。
我现在有什么
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(doSomething) object:self];
[self performSelector:@selector(doSomething) withObject:nil afterDelay:2.0];
当用户触摸某个对象时,我需要启动一个方法,但如果他/她再次触摸该对象,我想不要调用该方法。
用例#1:
用例#2:
如果感觉performSelector
和cancelPrevious
是hacky。我是否应该使用某种队列,然后每次用户再次触摸时清除队列?
或者我应该使用计时器并在每次用户触摸时重新启动计时器?
答案 0 :(得分:0)
@interface ViewController ()
{
NSTimer *timer;
NSInteger seconds;
}
@end
- (IBAction)start:(id)sender
{
seconds = 5;
[timer invalidate];
timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(execute) userInfo:nil repeats:YES];
}
- (void)execute
{
if(seconds > 0) {
NSLog(@"seconds: %li", (long)seconds);
seconds--;
}
else {
NSLog(@"fire");
[timer invalidate];
}
}