Grand Central Dispatch samples
You can use GCD for thread substitutions. It needs blocks.
Example of use:
- (void)doTimeConsumingOperation:(id)operation {
dispatch_queue_t queue;
queue = dispatch_queue_create("com.example.operation",NULL);
dispatch_async(queue,^{
[operation doOperation]; // Main op.
});
dispatch_release(queue)
}
You can use dispatch_sync instead dispatch_async for locked code execution.
Another sample of code is this way to perform a delayed selector on an object:
- (void)doLaterOperation:(id)operation {
dispatch_time_t delay;
delay = dispatch_time(DISPATCH_TIME_NOW, 50000 /* nanoseconds */);
dispatch_after(delay,^{
[operation doOperation]; // Main op.
});
dispatch_release(delay);
}
Finally other fine use of GCD is for creating safe singleton objects:
+(MyClass *) sharedInstance {
static dispatch_once_t predicate;
static MyClass *shared = nil;
dispatch_once(&predicate, ^{
shared = [[MyClass alloc] init];
});
return shared;
}
With dispatch_once the code only will be executed one and only one time.
Available in iOS 4.0 and later.
Available in Mac OS X v10.6 and later.
20110324.26