__block 是干什么用的1234567int val = 10; MyBlock block = ^{ NSLog(@"val = %d",val);};block();//输出2020-09-22 14:24:47.018497+0800 MyDemo[2987:2658512] val = 10
从一段简单的code说起,在block中修改val的值该怎么办呢?
直接在block中修改会报编译错误Variable is not assignable (missing __block type specifier)
显而易见我们只需要在val变量前加__block关键字即可。
12345678__block int val = 10;MyBlock block = ^{ val += 10; NSLog(@"val = %d",val);};block();//输出2020-09-22 14:29:38.065700+0800 MyDemo[2991:2660066] ...
致未来的我:你是不是有点忘记了GCD的一些知识?恰巧这几天我有看这些,让我给你讲讲吧?GCD是基于C语言的API,开发者只需要将任务放在block内,并指定好追加的队列,就可以完成多线程开发.
知识点速览1.队列: 串行队列、并发队列
2.任务: 同步任务、异步任务
3.队列和任务的交叉组合使用
4.死锁的产生和预防
队列Dispatch Queue是执行处理的等待队列,按照任务(block)追加到队列里的顺序,先进先出执行处理。
而等待队列有两种
Serial Dispatch Queue:串行队列,等待当前执行任务处理结束的队列。
Concurrent Dispatch Queue:并发队列,不等待当前执行任务处理结束的队列
那么如何创建一个新队列呢
12345//创建了串行队列dispatch_queue_t serailQueue = dispatch_queue_create("Test_SERIAL_GCD_Queue", DISPATCH_QUEUE_SERIAL);//创建了并行队列dispatch_queue_t concurrentQueu...