2014-03-04 45 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 
}