5.8. Performing Tasks After a Delay with GCD
Problem
You want to be able to execute code but after a certain amount of delay, which you would like to specify, using GCD.
Solution
Use the dispatch_after
and
dispatch_after_f
functions.
Discussion
With Core Foundation, you can invoke a selector in an object
after a given period of time, using the performSelector:withObject:afterDelay:
method of the NSObject
class. Here
is an example:
- (void) printString:(NSString *)paramString{ NSLog(@"%@", paramString); } - (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ [self performSelector:@selector(printString:) withObject:@"Grand Central Dispatch" afterDelay:3.0]; self.window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; return YES; }
In this example we are asking the runtime to call the printString:
method
after three seconds of delay. We can do the same thing in GCD using
the dispatch_after
and dispatch_after_f
functions, each of which is described here:
dispatch_after
Dispatches a block object to a dispatch queue after a given period of time, specified in nanoseconds. These are the parameters that this function requires:
- Delay in nanoseconds
The number of nanoseconds GCD has to wait on a given dispatch queue (specified by the second parameter) before it executes the given block ...
Get iOS 5 Programming Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.