多线程热恋
1 - (void)gcdTest1 { 2 3 4 5 //1.GCD应用 单例模式 6 7 8 9 static dispatch_once_t onceToken; 10 11 dispatch_once(&onceToken, ^{ 12 13 14 15 NSLog(@"执行一次%@",[NSThread currentThread]); 16 17 }); 18 19 }
1 - (void)gcdTest2 { 2 3 4 5 //延迟操作 6 7 //1、 8 9 NSLog(@"开始执行"); 10 11 12 13 // [self performSelector:@selector(handleAction) withObject:nil afterDelay:0]; 14 15 16 17 //2、 18 19 20 21 //DISPATCH_TIME_NOW 从现在开始 22 23 //delayInSeconds 延迟几秒 24 25 26 27 dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)); 28 29 30 31 // when dispatch_time_t 32 33 34 35 dispatch_after(time, dispatch_get_main_queue(), ^{ 36 37 38 39 NSLog(@"%@",[NSThread currentThread]); 40 41 42 43 }); 44 45 46 47 }
- (void)gcdTest2 {
//延迟操作
//1、
NSLog(@"开始执行");
// [self performSelector:@selector(handleAction) withObject:nil afterDelay:0];
//2、
//DISPATCH_TIME_NOW 从现在开始
//delayInSeconds 延迟几秒
dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC));
// when dispatch_time_t
dispatch_after(time, dispatch_get_main_queue(), ^{
NSLog(@"%@",[NSThread currentThread]);
});
}
1 - (void)gcdTest3 { 2 3 4 5 //创建调度组 6 7 dispatch_group_t group = dispatch_group_create(); 8 9 //获取全局队列 10 11 dispatch_queue_t queue = dispatch_get_global_queue(0, 0); 12 13 //调度组的异步请求 14 15 dispatch_group_async(group, queue, ^{ 16 17 18 19 [NSThread sleepForTimeInterval:2]; 20 21 NSLog(@"下载第一张图"); 22 23 }); 24 25 dispatch_group_async(group, queue, ^{ 26 27 [NSThread sleepForTimeInterval:3]; 28 29 30 31 NSLog(@"下载第二张图"); 32 33 }); 34 35 dispatch_group_async(group, queue, ^{ 36 37 [NSThread sleepForTimeInterval:1]; 38 39 40 41 NSLog(@"下载第三张图"); 42 43 }); 44 45 dispatch_group_async(group, queue, ^{ 46 47 [NSThread sleepForTimeInterval:5]; 48 49 50 51 NSLog(@"下载第四张图"); 52 53 }); 54 55 //notify通知,当所有异步请求完成时调用dispatch_group_notify 56 57 dispatch_group_notify(group, queue, ^{ 58 59 NSLog(@"更新UI"); 60 61 }); 62 63 64 65 }
1 //队列调度的第二种方法 2 3 - (void)gcdTest4 { 4 5 6 7 //创建调度组 8 9 dispatch_group_t group = dispatch_group_create(); 10 11 //获取全局队列 12 13 dispatch_queue_t queue = dispatch_get_global_queue(0, 0); 14 15 16 17 //进入队列 18 19 dispatch_group_enter(group); 20 21 dispatch_async(queue, ^{ 22 23 24 25 [NSThread sleepForTimeInterval:2]; 26 27 NSLog(@"下载第一张图"); 28 29 30 31 //离开队列 32 33 dispatch_group_leave(group); 34 35 }); 36 37 38 39 dispatch_group_enter(group); 40 41 dispatch_async(queue, ^{ 42 43 44 45 [NSThread sleepForTimeInterval:1]; 46 47 NSLog(@"下载第er张图"); 48 49 50 51 dispatch_group_leave(group); 52 53 }); 54 55 56 57 dispatch_group_enter(group); 58 59 dispatch_async(queue, ^{ 60 61 62 63 [NSThread sleepForTimeInterval:3]; 64 65 NSLog(@"下载第san张图"); 66 67 68 69 dispatch_group_leave(group); 70 71 }); 72 73 74 75 //等待调度队列wait相当于一个阻塞状态 76 77 dispatch_group_wait(group, DISPATCH_TIME_FOREVER); 78 79 80 81 NSLog(@"更新UI"); 82 83 84 85 }
1 //中断操作 2 3 4 5 - (void)gcdTest5 { 6 7 8 9 //dispatch_barrier_async一定是自定义队列 10 11 //这里指定的并发队列应该是自己通过dispatch_queue_create函数创建的。如果你传的是一个串行队列或者全局并发队列,这个函数等同于dispatch_async函数。 12 13 14 15 dispatch_queue_t queue = dispatch_queue_create("com.bjsxt", DISPATCH_QUEUE_CONCURRENT); //dispatch_get_global_queue(0, 0); 16 17 18 19 dispatch_async(queue, ^{ 20 21 [NSThread sleepForTimeInterval:1]; 22 23 NSLog(@"1"); 24 25 }); 26 27 28 29 dispatch_async(queue, ^{ 30 31 [NSThread sleepForTimeInterval:3]; 32 33 34 35 NSLog(@"2"); 36 37 }); 38 39 dispatch_async(queue, ^{ 40 41 42 43 [NSThread sleepForTimeInterval:2]; 44 45 46 47 NSLog(@"3"); 48 49 }); 50 51 52 53 //中断操作dispatch_barrier_async 54 55 dispatch_barrier_async(queue, ^{ 56 57 NSLog(@"--------"); 58 59 [NSThread sleepForTimeInterval:1]; 60 61 62 63 }); 64 65 66 67 dispatch_async(queue, ^{ 68 69 70 71 [NSThread sleepForTimeInterval:1]; 72 73 NSLog(@"4"); 74 75 }); 76 77 dispatch_async(queue, ^{ 78 79 NSLog(@"5"); 80 81 }); 82 83 }
1 - (void)gcdTest6 { 2 3 4 5 //遍历操作 6 7 dispatch_queue_t queue = dispatch_get_global_queue(0, 0); 8 9 //iterations 遍历的次数 10 11 dispatch_apply(5, queue, ^(size_t i) { 12 13 NSLog(@"%@",@(i)); 14 15 }); 16 17 }