今天学习了一下dispatch
下面写下GCD线程的基本使用(单例会在后面穿插)
/**
* GCD 中央派发机制 Grand Central Dispatch
*
* 基于函数, 使用分发队列
*/
// 1.主线程队列, 等同[NSOperationQueue mainQueue]
// 2.全局线程队列, 后台队列, 并行
// 3.自定义线程队列, DISPATCH_QUEUE_SERIAL 串行
// DISPATCH_QUEUE_CONCURRENT 并行
// 我们写一个打印函数,以便在控制台看到线程的运行顺序
- (void)printNumber:(NSString *)name {
for (int i = 0 ; i < 100; i++) {
NSLog(@"%d, 当前线程:%@", i, [NSThread currentThread]);
NSLog(@"%@", name);
}
}
// 创建自定义队列
dispatch_queue_t myQueue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_PRIORITY_DEFAULT);
// 队列优先级, 串行/ 并行
// dispath_async (队列, 执行block); 异步
// dispath_sync (队列, 执行block); 同步
// 串行队列
dispatch_async(myQueue, ^{
[self printNumber:@"GCD"];
[self printNumber:@"G1"];
});
// 添加操作
dispatch_async(myQueue, ^{
[self printNumber:@"G2"];
});
控制台的运行结果是:先运行GCD,运行完之后再运行G1,G1运行完后再运行G2
// 并行队列
dispatch_queue_t conQueue = dispatch_queue_create("conQueue", DISPATCH_QUEUE_CONCURRENT);//f
dispatch_async(conQueue, ^{
[self printNumber:@"G1"];
[self printNumber:@"G2"];
});
dispatch_async(conQueue, ^{
[self printNumber:@"G3"];
});
dispatch_async(conQueue, ^{
[self printNumber:@"G4"];
});
控制台运行结果:先并行异步运行G1 G3 G4 , 完成之后运行G2.