#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; #pragma mark -- GCD串行队列-- //系统提过的一个串行队列 //使用系统提供串行队列(主线程队列) dispatch_queue_t queue = dispatch_get_main_queue(); //创建一个串行队列 //第一个参数: 系统提供好的一个宏 //第二个参数: 系统保留字段 0 dispatch_queue_t queue = dispatch_queue_create(DISPATCH_QUEUE_SERIAL, 0); #pragma mark -- 创建一个并行的队列-- //使用系统提供的并行队列 //DISPATCH_QUEUE_PRIORITY_BACKGROUND表示队列的优先级 // 0 保留字段 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0); //创建一个并行队列 //第一个参数: 表示这个队列的名字 //第二个参数: 表示系统提供好的一个宏 // dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT); //使用dispatch_async 向队列中添加任务 dispatch_async(queue, ^{ NSLog(@"mian == %@, current == %@", [NSThread mainThread], [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"mian1 == %@, current1 == %@", [NSThread mainThread], [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"mian2 == %@, current2 == %@", [NSThread mainThread], [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"mian3 == %@, current3 == %@", [NSThread mainThread], [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"mian4 == %@, current4 == %@", [NSThread mainThread], [NSThread currentThread]); }); #pragma mark -- 表示几秒之后做什么事情-- // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // NSLog(@"已经3秒之后了"); // // }); // #pragma mark -- 重复的向一个队列中添加一系列的任务-- dispatch_queue_t queue = dispatch_queue_create(0, DISPATCH_QUEUE_SERIAL); dispatch_apply(3, queue, ^(size_t index) { NSLog(@"index == %zu", index); }); #pragma mark -- 分组-- //创建一个分组 dispatch_group_t group = dispatch_group_create(); //创建一个队列 dispatch_queue_t queue = dispatch_queue_create("myQueue", 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_async(group, queue, ^{ NSLog(@"我是第4个任务"); }); //向分组添加结束任务 //注意: 不要将结束任务放到第一个位置 dispatch_group_notify(group, queue, ^{ NSLog(@" 无论这样,我是最后一个任务"); }); #pragma mark -- 并发中的串行 (披着羊皮的狼)-- dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^{ NSLog(@"我是查询操作1"); }); dispatch_async(queue, ^{ NSLog(@"我是查询操作2"); }); dispatch_barrier_async(queue, ^{ NSLog(@"我是插入操作"); }); dispatch_async(queue, ^{ NSLog(@"我是查询操作3"); }); dispatch_async(queue, ^{ NSLog(@"我是查询操作4"); }); }
MyObject类.m中
#import "MyObject.h" static MyObject *object = nil; @implementation MyObject + (MyObject *)shareMyObject { static dispatch_once_t onceToken; //表示同一时间内只有一个线程可以访问block块里面的内容 dispatch_once(&onceToken, ^{ if (object == nil) { object = [[MyObject alloc]init]; } }); return object; }
时间: 2024-10-15 12:12:19