2014-03-04 48 views
0

我有一个方法如下代码:延长调度时间dispatch_after

int64_t delayInSeconds = 2.0f; 
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 

dispatch_after(popTime, dispatch_get_main_queue(), ^(void) { 
    // Do some stuff 
} 

如果该方法delayInSeconds之前调用到了,我想通过另一两秒延长定时器。然后执行该块。我怎样才能做到这一点?

+0

我不认为,一旦是可能的,因为块的延迟时间内发出。您可以在块内添加另一个dispatch_after,并相应地将其时间设置为0或2秒。 – Volker

回答

1

然后我会建议不要使用gcd。相反,你可以尝试:

[自performSelector:@selector(anyMethod)withObject:无afterDelay:yourDelay]

//然后,如果你只是需要取消做:

[NSObject的cancelPreviousPerformRequestsWithTarget:自我选择器:@选择器(anyMethod)对象:无]

//只需重新安排您的计时器。

+0

完美答案。谢谢! –

1

你可以使用NSTimer

- (void)someFunctionThatGetsCalledMoreThanOnce { 
    ... 

    [_myTimer invalidate]; 
    _myTimer = [NSTimer timerWithTimeInterval:2.0 
             target:self 
            selector:@selector(doStuff:) 
            userInfo:nil 
             repeats:NO]; 

    ... 
} 

- (void)doStuff:(NSTimer*)timer { 
    // Do some stuff 
}