1 前言
使用 dispatch_group_create 函数在 GCD 上创建一个组。 用于处理彼此之间的依赖关系,将代码块分组来确保它们被 GCD 逐个执行。
GCD 中使用组的时候你应该知道 4 个函数:
dispatch_group_create
创建一个组句柄。一旦你使用完了这个组句柄,应该使用 dispatch_release 函数将其释放。
dispatch_group_async 在一个组内提交一个代码块来执行。必须明确这个代码块属于哪个组,必须在哪个派送队列上执行。
dispatch_group_notify
允许你提交一个 Block Object。一旦添加到这个组的任务完成执行之后,这个 Block Object 应该被执行。
这个函数也允许你明确执行 Block Object 的分派队列。
dispatch_release
这个函数释放那任何一个你通过 dispatch_group_create 函数创建的分派小组。
2 代码实例
- (void) reloadTableView{
//__FUNCTION__ 方法会输出 [类 方法名] 的格式内容;
NSLog(@"%s", __FUNCTION__);
}
- (void) reloadScrollView{
NSLog(@"%s", __FUNCTION__);
}
- (void) reloadImageView{
NSLog(@"%s", __FUNCTION__);
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//创建队列组
dispatch_group_t taskGroup = dispatch_group_create();
//创建主队列
dispatch_queue_t mainQueue = dispatch_get_main_queue();
/*在主队列上调用*/
dispatch_group_async(taskGroup, mainQueue, ^{
[self reloadTableView]; });
/*在主队列上调用*/
dispatch_group_async(taskGroup, mainQueue, ^{
[self reloadScrollView]; });
/*在主队列上调用*/
dispatch_group_async(taskGroup, mainQueue, ^{
[self reloadImageView]; });
/*以上队列结束后继续在主队列上调用下面的Block方法*/
dispatch_group_notify(taskGroup, mainQueue, ^{
[[[UIAlertView alloc] initWithTitle:@"Finished"
message:@"All tasks are finished" delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil] show];
});
//释放队列组
dispatch_release(taskGroup);
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[ZYViewController alloc] initWithNibName:@"ZYViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
2013-05-12 11:13:54.886 GCDGroupTest[684:c07] -[ZYAppDelegate reloadTableView]
2013-05-12 11:13:54.888 GCDGroupTest[684:c07] -[ZYAppDelegate reloadScrollView]
2013-05-12 11:13:54.889 GCDGroupTest[684:c07] -[ZYAppDelegate reloadImageView]
3 结语
以上是所有内容,希望对大家有所帮助。