iOS GCD 学习笔记(一)

“开发者要做的知识定义像执行的任务并追加到适当的Dispatch Queue中。”

dispatch_async(queue,^{/**想执行的任务*/});
queue有两种类型,Serial Dispatch Queue(等待现在执行中处理结束)和Concurrent Dispatch Queue(不等待现在执行中处理结束)。
Serial Dispatch Queue使用一个线程就能完成,而Concurrent Dispatch Queue就要使用多个线程了。

1.生成Dispatch Queue

//指定NULL生成Serial Dispatch Queue
dispatch_queue_t mySerialDispatchQueue = dispath_queue_create("com.example.gcd.MySerialDispatchQueue",NULL);

可以生成多个Serial Dispatch Queue,每个Serial Dispatch Queue占一个线程,Serial Dispatch Queue 之间并行执行,避免生成过多的Serial Dispatch Queue。Serial Dispatch Queue用来解决多个线程更新相同资源导致数据竞争,如更新数据库时一个表生成一个Serial Dispatch Queue。其他情况使用Concurrent Dispatch Queue。不管生成多少Concurrent Dispatch Queue,内核只使用有效管理的线程。

dispatch_queue_t myConcurrentDispatchQueue = dispatch_queue_create("com.example.gcd.MyConcurrentDispatchQueue",DISPACTH_QUEUE_CONCURRENT);
//在Concurrent Dispatch Queue中
dispatch_async(myConcurrentDispatchQueue,^{NSLog(@"block on myConcurrentDispathQueue");});
生成的Dispatch Queue必须有程序员负责释放,ARC管不到这里。
dispatch_release(mySerialDispatchQueue);
以上三段代码合在一起
dispatch_queue_t myConcurrentDispatchQueue = dispatch_queue_create("com.example.gcd.MyConcurrentDispatchQueue",DISPACTH_QUEUE_CONCURRENT);
dispatch_async(myConcurrentDispatchQueue,^{NSLog(@"block on myConcurrentDispathQueue");});
dispatch_release(mySerialDispatchQueue);
在dispatch_async函数中追加Block到Concurrent Dispatch Queue,并立即通过dispatch_release函数进行释放是否可以呢?完全可以,block会通过dispatch_retain函数持有Dispatch Queue。一旦block执行结束,就通过dispatch_release函数进行释放该block持有的Dispatch Queue。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值