iOS开发之GCD(2)API Dispatch Queue
来源:互联网 发布:java语法大全 编辑:程序博客网 时间:2024/04/19 13:11
生成dispatch queue的API:
(1)生成Serial Dispatch Queue(一个线程,追加的任务按照追加顺序一次执行)
dispatch_queue_t mySerialDispatchQueue = dispatch_queue_create("com.faterman.gcd_demo_mySerialDispatchQueue", NULL);
tips:1.这种方式可以避免数据竞争
2.生成多个Serial Dispatch Queue并各自追加任务,也可以实现并发处理。但是要根据需要合理控制生成数量。
(2)生成Concurrent Dispatch Queue(由XNU内核启动合理数量的线程,并发执行追加的任务)
dispatch_queue_t mySerialDispatchQueue = dispatch_queue_create("com.faterman.gcd_demo_mySerialDispatchQueue", DISPATCH_QUEUE_CONCURRENT);
Dispatch Queue的内存管理(ARC讨论):
(1)在6.0的SDK之前,虽然已经有了ARC技术,但是Dispatch Queue并没有像Block一样作为对象被纳入管理范畴。所以即使是ARC文件仍旧需要手动进行retain和release。
dispatch_queue_t mySerialDispatchQueue = dispatch_queue_create("com.faterman.gcd_demo_mySerialDispatchQueue", DISPATCH_QUEUE_CONCURRENT); dispatch_async(mySerialDispatchQueue, ^{ //执行长时间的处理 //图像识别 //数据库读取 dispatch_async(dispatch_get_main_queue(), ^{ //用户界面更新 }); }); dispatch_release(mySerialDispatchQueue);tips:这样的操作没有问题,因为block会持有queue,所以可以在异步时候对queue进行release。block执行结束后会释放queue。
(2)在6.0的SDK之后
生成属性
#if OS_OBJECT_USE_OBJC@property (strong, nonatomic) dispatch_queue_t barrierQueue;#else@property (assign, nonatomic) dispatch_queue_t barrierQueue;#endif
override dealloc方法
#if !OS_OBJECT_USE_OBJC //这个宏是在sdk6.0之后才有的,如果是之前的,则OS_OBJECT_USE_OBJC为0 dispatch_release(_barrierQueue);#endif当然了,也可以使用#if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000 // 6.0sdk之前 dispatch_release(_barrierQueue);#endif
ySerialDispatchQueue)
0 0
- iOS开发之GCD(2)API Dispatch Queue
- iOS开发之GCD(3)Main Dispatch Queue/Global Dispatch Queue
- iOS开发之GCD(6)API Dispatch Group
- ios多线程之GCD dispatch queue
- GCD之dispatch queue
- GCD之dispatch queue
- GCD之dispatch queue
- GCD之dispatch queue
- GCD之dispatch queue
- GCD之dispatch queue
- GCD之dispatch queue
- GCD之dispatch queue
- GCD之dispatch queue
- GCD之dispatch queue
- GCD之dispatch queue
- GCD之dispatch queue
- GCD之dispatch queue
- iOS系统GCD学习(2):Dispatch Queue
- RubyMine快捷键
- HDOJ 1004 Let the Balloon Rise
- 丢包工具
- hdu 5009(dp)
- install apache with ssl
- iOS开发之GCD(2)API Dispatch Queue
- 第一周项目二--长方柱类
- mysql中engine=innodb和engine=myisam的区别
- EXT2 file system dir.c with my comments
- OpenCV 2.4.6在VS2010的重编译
- (hdu step 7.1.2)You can Solve a Geometry Problem too(求n条线段中,线段两两相交的数量)
- 粒子滤波总结笔记
- iOS传值之block传值(一)
- android提高进程优先级的方法