dispatch_group_t group= dispatch_group_create();
dispatch_semaphore_t semaphore = dispatch_semaphore_create(10);
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
for(int i =0; i <100; i++){
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
dispatch_group_async(group, queue, ^{
NSLog(@"%i",i);
sleep(2);
dispatch_semaphore_signal(semaphore);
});
}
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
dispatch_group_notify(group, queue, ^{
NSLog(@"ok");
//在这里 进行请求后的方法,回到主线程
dispatch_async(dispatch_get_main_queue(), ^{
//更新UI操作
});
});
// // 创建信号量
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
// 创建全局并行
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{
sleep(8);
dispatch_semaphore_signal(semaphore);
NSLog(@"==========1==========");
});
dispatch_group_async(group, queue, ^{
sleep(6);
dispatch_semaphore_signal(semaphore);
NSLog(@"==========2==========");
});
dispatch_group_async(group, queue, ^{
sleep(4);
dispatch_semaphore_signal(semaphore);
NSLog(@"==========3===========");
});
dispatch_group_notify(group, queue, ^{
// 三个请求对应三次信号等待
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
//在这里 进行请求后的方法,回到主线程
dispatch_async(dispatch_get_main_queue(), ^{
//更新UI操作
NSLog(@"ok");
});
});
for (int i = 0; i<3000000; i++) {
//选择组合:全局队列异步执行 -> 由子线程下载图片
dispatch_queue_t globalQueue = dispatch_get_global_queue(0, 0);
dispatch_async(globalQueue, ^{
NSLog(@"开始下载图片:%@", [NSThread currentThread]);
//NSString -> NSURL -> NSData -> UIImage
// NSString *imageStr = @"http://www.egouz.com/uploadfile/2015/0305/20150305103626911.jpg";
NSString *imageStr = @"http://img.zcool.cn/community/01e1d8596a4778a8012193a32eaf45.jpg";
NSURL *imageURL = [NSURL URLWithString:imageStr];
//下载图片
@autoreleasepool{
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
UIImage *image = [UIImage imageWithData:imageData];
}
//从子线程回到主线程(方式二:常用)
//组合:主队列异步执行
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"回到主线程:%@", [NSThread currentThread]);
//更新界面
// self.imageView.image = image;
});
NSLog(@"xxxxxxxx");
});
}
网友评论