Objective-C (iOS): GCD でバックグラウンド処理

Grand Central Dispatch (GCD) でエロいバックグラウンド処理ののち、
メインスレッドに戻してやるエロい処理例。

Objective-C: ero.m

- (void) エロい処理 {
	
    // グローバルキュー(バックグラウンド)を取得、並列実行する (プライオリティ: 0)
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(queue, ^{
        
        // なんかエロい処理を書く
        // …
        NSError *error = nil;
        NSURL *url = [self getEroWithError:&error];
        
        // UI 系のフィードバックはメインスレッドで行う
        if(error != nil) {
            // メインスレッド呼び出し
            dispatch_async(dispatch_get_main_queue(), ^{
                NSLog(@"Error: %@", error);
                [self showAlertMessage:[error.userInfo objectForKey:@"message"] withTitle:@"Error"];
            });
        } else {
            // メインスレッド呼び出し
            dispatch_async(dispatch_get_main_queue(), ^{
                // Display the URL in Safari
                [[UIApplication sharedApplication] openURL:url];
            });
        }
    });
}