iOS
6.6k 词
__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] ...
iOS
7.7k 词
致未来的我:你是不是有点忘记了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...