// 创建队列的对象
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
// 当值设置为1的时候,可以叫做串行:即顺序执行
// 当设置大于1的时候,叫做并行:多条通道同时进行各自的任务
queue.maxConcurrentOperationCount = 2;
for (int i= 0; i < 10; i++) {
NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"current = %@, da = %@, i = %d", [NSThread currentThread], [NSThread mainThread], i);
}];
[queue addOperation:blockOperation];
}
#pragma mark - 使用GCD去创建一个串行队列
// 第一种:系统提供的创建串行队列的方法
dispatch_queue_t queue = dispatch_get_main_queue();//在真正的开发中如果需要创建串行队列,比较习惯用这种
// 第二种:自己创建
// 参数1:系统提供的一个宏
// 参数2:是系统的保留字段
// 参数1和2可以互换位置,位置没有严格要求
dispatch_queue_t queue = dispatch_queue_create(DISPATCH_QUEUE_SERIAL, 0);
#pragma mark - 使用GCD去创建一个并行队列
// 第一种:系统提供的
// 参数1:优先级(有四个,没有明显的区别DISPATCH_QUEUE_PRIORITY_DEFAUL, DISPATCH_QUEUE_PRIORITY_HIGH, DISPATCH_QUEUE_PRIORITY_LOW, DISPATCH_QUEUE_PRIORITY_BACKGROUND
)
// 参数2:系统的保留字段
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
// 第二种:自己创建
// 参数1:表示创建队列的名字(苹果推荐使用反向域名去命名)
// 参数2:系统提供的一个宏(队列的类型)
dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
NSLog(@"currentThread = %@", [NSThread currentThread]);
NSLog(@"mainThread = %@", [NSThread mainThread]);
});
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"3.0秒之后输出");
});
dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_apply(10, queue, ^(size_t index) {
NSLog(@"%ld", index);
});
// 创建一个分组
dispatch_group_t group = dispatch_group_create();
// 创建一个并行队列
dispatch_queue_t queue = dispatch_queue_create(0, DISPATCH_QUEUE_CONCURRENT);
dispatch_group_async(group, queue, ^{
NSLog(@"我是任务1");
});
dispatch_group_async(group, queue, ^{
NSLog(@"我是任务2");
});
dispatch_group_async(group, queue, ^{
NSLog(@"我是任务3");
});
// 用于监听所有任务的执行情况的(所以此功能代码必须放在所有任务之后书写)
dispatch_group_notify(group, queue, ^{
NSLog(@"我是在所有任务之