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_afterDispatches 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 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access