7.7. 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 ...

Get iOS 7 Programming Cookbook now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.