多线程:我们一般把耗时操作放到子线程来执行,然后主线程只做UI操作
GCD是苹果开发的一个多核编程的解决办法,和(NSThread、NSOperationQueue、NSInvocationOperation)多线程技术方案相比,使用起来更加简单和方便
//网络显示图片
self.indicator.hidden = NO; [self.indicator startAnimating]; //进入异步线程 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //异步下载图片 NSData * data = [NSData dataWithContentsOfURL:url]; //网络请求之后进入主线程 dispatch_async(dispatch_get_main_queue(), ^{ //关闭loading [self.indicator stopAnimating]; self.indicator.hidden = YES; if (data) {//显示图片 self.imageView.image = [UIImage imageWithData:data]; } }); });// 延迟执行:
double delayInSeconds = 2.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ // code to be executed on the main queue after delay });利用GCD并行多个线程并且等待所有线程结束之后再执行其它任务
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{ // 并行执行的线程一 }); dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{ // 并行执行的线程二 }); dispatch_group_notify(group, dispatch_get_global_queue(0,0), ^{ // 汇总结果 });