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