2011年11月18日 星期五

在 Objective-C 上 delay 執行一段 code

有時候,我們需要在 Objective-C 上 delay 執行一段 code,該如何處理呢?以往的做法通常需要新增一個 method,再用 [self performSelector:@selector(xxx) withObject:obj afterDelay:1.23] 的方法。幸好,在 iOS 4.0 / Mac OS X 10.6 之後,Apple 加入了 Grand Central Dispatch 技術,可以使用 Objective-C 的 block 而不用新增 method。

- (void)performBlock:(void (^)(void))block afterDelay:(NSTimeInterval)delay
{
 int64_t delta = (int64_t)(1.0e9 * delay);
 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delta), dispatch_get_main_queue(), block);
}

使用方法:

[self performBlock:^{
 // Lines of code
} afterDelay:1.23];

原文 出自 Matthias Plappert。

沒有留言:

張貼留言