1.关于GCD
Grand Central Dispatch是异步执行任务的技术之一。我们先看一个简单的示例:
1 - (void)doSomethingInBackground { 2 [self performSelectorInBackground:@selector(startWork) withObject:nil]; 3 } 4 5 - (void)startWork { 6 //长时间处理操作 7 NSLog(@"进行长时间处理"); 8 9 [self performSelectorOnMainThread:@selector(endWork) withObject:nil waitUntilDone:YES]; 10 } 11 12 - (void)endWork { 13 NSLog(@"完成工作并刷新页面"); 14 }
这个示例实现的功能很简单:在后台线程中执行长时间的处理,处理结束后,在主线程中使用处理结果。上面实现方式是使用NSObject类的performSelectorInBackground和performSelectorOnMainThread来实现的。下面我们用GCD的方式来实现同样功能,做个对比:
1 dispatch_queue_t queue = dispatch_queue_create("com.gcd.test", DISPATCH_QUEUE_CONCURRENT); 2 dispatch_async(queue, ^{ 3 &n