iOS的并发管理总结


总纲:

尽量不要自己管理线程,由系统管理更加简单高效安全。


iOS上支持并发的类型: 

  1. GCD:可并发也可串行,queue严格先进先出,基于C,使用block执行线程任务。给你的任务选择适合的dispatch queue即可。
  2. Operation:可以配置任务依赖,总是并发,基于Cocoa,支持KVO通知监控执行状态
  3. 线程:自己管理线程的生命周期,同步加锁有一定性能开销。 

准则: 

  1. 尽量用GCD或者Operation来代替自己管理线程,实现简单并且执行效率高。
  2. 使用串行dispatch queue来管理互斥资源和临界区,比使用信号量更加高效。
  3. 使用Operation对象时:

  • 如果需要获取执行后的结果数据,需要拥有Operation对象的引用,防止执行完被销毁。
  • 默认start并未捕捉异常,必须自己来捕获所有异常。
  • Operation的调度是有性能开销的,尽量避免大量的小operation对象。
  • 加入queue后,不要再修改Operation对象。

     4.  自定义Operation对象时:

  • 即使执行被取消,也要通知KVO observers,防止有执行依赖。
  • 配置依赖关系时,注意不能创建循环依赖。
  • 在任务中应该创建自己的autorelease pool。

    5.   使用GCD:

  • 不要在Block中使用父函数的大写结构体和指针内容,也不要用_block来修改外部变量。
  • 避免大量任务太小的block。
  • 使用queue context指针来共享block之间数据,而不是缓存。
  • 如果创建大量OC对象,最好自己创建autorelease pool。
  • 使用串行queue注意引用计数。
  • 尽量避免在任务中获取锁(semaphore)。
  • 尽量避免在任务中使用POSIX线程函数(pthread)

     6.   对于实时性要求高的任务,还是需要使用线程。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值