说来惭愧,做 iDev 一年多了,最近才第一次在正式项目中使用 GCD。做个笔记。

Grand Central Dispatch(GCD) 是苹果 iOS 4 推出的任务调度机制,把不同的任务分配给不同的 queue 来处理,非常适合异步任务,支持多核处理器,比 performSelectorInBackground 这种线程调度有更好的处理性能,而且配合 Blocks 使用非常方便。

dispatch_queue_t bgQueue = dispatch_queue_create("im.fann.bgQueue", NULL);
// or dispatch_queue_t bgQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// or dispatch_queue_t bgQueue = dispatch_get_global_queue(0, 0,); for short

dispatch_async(bgQueue, ^{

    ...// load data from server

    dispatch_async(dispatch_get_main_queue, ^{
        // dispatch_get_main_queue get back to the main queue to update UI. You can only change UI in main queue.
        [rootTableView reloadData];
    });
});

非常棒的 GCD 系列教程: