//一、建立主线程(串行) dispatch_async(dispatch_get_main_queue(), ^{ //刷新界面代码 }); //二、建立异步线程(并行) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //比较耗时的代码放这里 }); //三、gcd延迟 double delayInSeconds = 1.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ //延迟代码 }); //四、gcd只执行一次 static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ //只执行一次代码 }); //五、有三个任务,须要异步并发执行前两个任务,前两个任务执行完成后再执行第三个任务。 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //建立组 dispatch_group_t group=dispatch_group_create(); // 关联一个任务到group dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //任务一 NSLog(@"******执行任务一******"); }); // 关联一个任务到group dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //任务二 NSLog(@"******执行任务二******"); }); // 等待组中的任务执行完毕,回到主线程执行block回调 dispatch_group_notify(group, dispatch_get_main_queue(), ^{ //任务三 NSLog(@"******等待组中的任务执行完毕,回到主线程执行block回调,执行任务三******"); }); }); //六、dispatch_barrier_async的使用,dispatch_barrier_async是在前面的任务执行结束后它才执行,并且它后面的任务等它执行完成以后才会执行 dispatch_queue_t queue = dispatch_queue_create("create_asy_queue", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^{ NSLog(@"dispatch_async1"); }); dispatch_async(queue, ^{ NSLog(@"dispatch_async2"); }); dispatch_barrier_async(queue, ^{ NSLog(@"dispatch_barrier_async"); dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"刷新界面"); }); }); dispatch_async(queue, ^{ [NSThread sleepForTimeInterval:1]; NSLog(@"dispatch_async3"); }); /*七、GCD的另外一个用处是可让程序在后台较长久的运行。 在没有使用GCD时,当app被按home键退出后,app仅有最多5秒钟的时候作一些保存或清理资源的工做。可是在使用GCD后,app最多有10分钟的时间在后台长久运行。这个时间能够用来作清理本地缓存,发送统计数据等工做。 让程序在后台长久运行的示例代码以下: */ // AppDelegate.h文件 @property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundUpdateTask; // AppDelegate.m文件 - (void)applicationDidEnterBackground:(UIApplication *)application { [self beingBackgroundUpdateTask]; // 在这里加上你须要长久运行的代码 [self endBackgroundUpdateTask]; } - (void)beingBackgroundUpdateTask { self.backgroundUpdateTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ [self endBackgroundUpdateTask]; }]; } - (void)endBackgroundUpdateTask { [[UIApplication sharedApplication] endBackgroundTask: self.backgroundUpdateTask]; self.backgroundUpdateTask = UIBackgroundTaskInvalid; }