GCD使用注意事项

原创 2015年11月20日 22:28:50
GCD使用注意事项

        想必大家对GCD的概念都比较的熟悉,网上一搜一大堆,这里就不详细介绍了。
        今天主要探讨一下GCD使用时候的一些注意事项,用不好的话有可能出现死锁。
        死锁发生的场景:

 1. 使用同步函数dispatch_sync。
 2. 使用同步函数的线程跟同步函数执行的block线程为同一线程。

        死锁原因:

 1. 同步函数会阻塞当前线程,直到block执行完成。
 2. block线程被阻塞,block一直无法执行

        如下的代码片段就会发生死锁,程序运行只会输出:Before Block,然后程序卡住,无限的风火轮转起来。

- (void)testGCDDeadLock {
    dispatch_queue_t queue = dispatch_get_current_queue();
    NSLog(@"Before Block");
    dispatch_sync(queue, ^{
       NSLog(@"In Block");
    });
    NSLog(@"After Block");
}

        上面的代码片段只是为了方便测试,才使用了dispatch_get_current_queue函数,该函数在OSX10.9之后就被废弃,并且该函数不好操作,用不好会出现意想不到的后果。

        GCD给我们带了了使用线程方便的同时也埋下了隐患,因此在使用GCD相关的sync函数时,要特别的注意不能让执行block的线程为当前的线程。

        转载请注明出处:http://blog.csdn.net/skynullcode

gcd使用block注意事项

1、block 在实现时就会对它引用到的它所在方法中定义的栈变量进行一次只读拷贝,然后在 block 块内使用该只读拷贝; 2、非内联(inline) block 不能直接访问 self,只能通过将...
  • qcx321
  • qcx321
  • 2016年08月13日 19:22
  • 368

分割器使用注意事项

  • 2014年05月22日 20:56
  • 31KB
  • 下载

MySQL索引缺点&使用详细注意事项

本文转自:点击打开链接 以下主要介绍的是MySQL索引的缺点以及MySQL索引在实际操作中有哪些事项是值得我们大家注意的,我们大家可能不知道过多的对索引进行使用将会造成滥用,有兴趣的...

SVN客户端使用注意事项

  • 2014年02月12日 11:47
  • 24KB
  • 下载

使用Struts 2标签的注意事项

  • 2014年03月18日 12:17
  • 14KB
  • 下载

Vue.js使用v-bind绑定class时的注意事项

使用Vue.js中V-bind指令来绑定class和style时,Vue.js对其进行了增强。表达式结果出了字符串之外,还可以是对象或者数组。这里自己对其进行了测试,发现有一下的问题(代码中表明): ...
  • farYang
  • farYang
  • 2016年11月05日 00:33
  • 13970

多重背景使用注意事项

  • 2014年12月17日 17:12
  • 98KB
  • 下载

ICON MOBILE U声卡使用注意事项

  • 2014年07月31日 12:40
  • 2KB
  • 下载

结构体和共用体的使用及注意事项

一、结构体 1.结构体的作用 在网络协议、通信控制、嵌入式系统的C/C++编程中,我们经常要传送的不是简单的字节流,而是多种数据组合起来的一个整体,其表现形式就是一个结构体。 2.结构体的定义 结构体...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GCD使用注意事项
举报原因:
原因补充:

(最多只允许输入30个字)