GCD 标签

为什么dispatch_sync在主线程会死锁

首先看下面一段代码 dispatch_queue_t queue = dispatch_queue_create("abc", DISPATCH_QUEUE_SERIAL); dispatch_sync(queue, ^{//taskA //do something dispatch_sync(queue, ^{//taskB //啥也干不了 }); });     dispatch_sync函数用于将一个block(任务)提交到队列中同步执行,直到block执行完后,这个函数才会返回。queue是一个串行队列,如果先后加入两个任务,taskA和taskB, 那么只有taskA执行完之后taskB才能执行。如果taskB是在taskA中加进队列的,那么它们依然遵守先进先出原则,即taskA执行完之后taskB才执行,也就是taskB在等待taskA完成。但是因为dispatch_sync的同步特性,taskB执行不完taskA就不算完成,即taskA在等待taskB的完成,这样就发生了死锁。 根据上面那份代码,我们就可以理解下面的代码为什么会阻塞主线程了。 dis....

阅读全文 »

IBInspectable无法取值的问题

我在xib文件里用了IBInspectable然后在UIView的layoutSubviews里执行 dispatch_async(dispatch_get_main_queue(), ^{ //some code} 竟然取不到相应IBInspectable标记的值,如果在block的外边重新声明新的变量并赋值才可以 如图: 奇怪的问题,特此记录

阅读全文 »