IOS并发编程(1)
来源:互联网 发布:淘宝店铺 售假 申诉 编辑:程序博客网 时间:2024/05/22 17:14
dispatch_async(dispatch_get_XXX_queue(), ^{ //save data to file });
这样就实现了在 XXX_queue所在的线程中异步保持文件;因为gcd是更底层的调度,创建线程的开销,和调度多核cpu,比我们自己搞线程效率更高。所以官方推荐用优先用gcd的方式而不是自己搞线程。即在IOS中上面2.a的情况,完全可用gcd来替代,效率高,不容易出错,至于2.b的情况,貌似还是得搞线程,因为gcd的线程不是我们创建的,自然不好控制他。
4. NSOperationQueue,操作队列,优点是可以设置,操作(NSOperation)之间的依赖路径,并发个数,另外可以监视执行的进度。如果执行的多任务,有先后的依赖顺序,和别的相关联的特性,就适合用这个。(NSOperation)分两类Concurrent VS Non-Concurrent Operations,字面翻译为并发和非并发Operations,貌似这个并发与大的并发概念有所不同,先把他叫做默认方式和特殊方式的NSOperation。
a)默认方式(Non-Concurrent Operations),在Thread -> Operation start() ->Operations main()的调用过程中,不搞新的线程,执行完main函数就返回了。比如要干10个耗时的事,我们可以搞10个Operation,然后main函数中执行相应函数就行。
b)特殊方式(Concurrent Operations),如果我们在main()函数中,执行了异步函数,或者创建新线程了,就得用这种方式,因为调用异步函数后,会继续执行函数,很可能mian()函数执行完了,甚至这个线程都销毁了,这时异步回调才回来,这样这要崩溃了。比如,我们要请求10个异步网络请求,每个对应一个Operation,这时,就要搞成并发的,可以重载start()函数,把main()函数切换到另外的一个线程中去做,然后start()函数立即返回,因为我们重载了start()函数,这时候start()返回,并不会导致Operation执行结束,我们可以在网络请求真正完成的时候,用KVO的方式,告诉Operation完成了。
像IOS中有名的AFNetworking和ASIHTTP库就是这种搞法。NSOperation搞成并发的,需要重载NSOperation中的多个函数,并且对某些变量KVO兼容,估计是好通知下一个操作来执行或准备。
- IOS并发编程(1)
- iOS并发编程指南(1)
- iOS并发编程指南(1)
- iOS并发编程指南(1)
- iOS并发编程指南(1)
- iOS并发编程指南
- iOS并发编程指南
- iOS并发编程指南
- iOS并发编程指南
- iOS并发编程指南
- iOS 并发编程指南
- iOS并发编程指南
- iOS并发编程指南
- iOS并发编程指南
- iOS并发编程指南
- iOS并发编程指南
- iOS并发编程指南
- IOS并发编程笔记
- 集团企业信息化规划和实施研究
- WTL中GDI+支持资源文件加载
- Windows下用Git下载android源码
- C语言获取系统时间的几种方式
- Greenplum管理表
- IOS并发编程(1)
- COCOS2D-X Lua面向对象编程
- iOS开发之Objective-C与JavaScript交互操作
- C#生成随机颜色,返回16进制字符串
- Hibernate延迟加载问题及解决方案
- Linux启动ftp服务器530 Permission denied解决方法
- Api demo源码学习--App/Device Admin
- cocos2d-x 观察者模式
- 未解问题。ssh环境,两个Blob会出事。