GCD-1 Grand Central Dispatch

2016-08-21  本文已影响71人  ZMJun

本文是本人自己辛苦翻译的,请转载的朋友注明,翻译于Z.MJun的简书 ,感谢!<翻译不容易啊>


翻译于2016年5月12日


Grand Central Dispatch (GCD)

Grand Central Dispatch(GCD)包含语言特征,一些运行库,和 提供了全面的系统升级,和全新的改良的执行代码可以使用在IOS和OSX的硬件上。

BSD子系统,基础代码和Cocoa的APIs的扩张,更好的让系统和你的应用跑的更快,更有效率和提高了应答速度。一个应用要有效的使用多核是很困难的,更不用说,使用在不同数量的内核的硬件,或者许多程序在这些内核里面运作。GCD,是运作在系统底层,可以更好运作所有需要运行的应用,和平衡分配系统可使用资源。

这个文档描述了GCD的API,支持能在Unix系统等级下的异步操作。你可以使用API管理,文件描述,端口,信道和时间等接口。在OSX v10.7及以上的系统,你同样可以使用GCD在文件描述器上使用通用的异步I/O操作。

GCD不局限于使用在系统级的应用,但是在你要使用到更高层级(UI)的应用上的话,你需要考虑在Cocoa上已经提供了相似并且比较容易使用的Object,如:NSOperation,和block boject. 或者其他你能使用的Object。更多咨询在Concurrency Programming Guide

Important:

当同时使用GCD和fork 系统回调时,要特别注意。当一个进程使用了GCD回调之前回调fork,在子进程中直到成功调用exec或者相关功能后在使用额外GCD回调是非常不安全的做法。


GCD对象和ARC自动释放机制

当你的应用是基于OBJ-C的,所有的调度对象都是OBJ-C的。例如,当应用使用的是ARC,调度对象的内存分配机制和其他的OBJ-C对象一样。如果不是使用ARC的,需要使用dispatch_retaindispatch_release方法来管理调度对象,而不是使用基础代码的 retain 和 release 方法
如果你需要在使用了ARC的应用下使用retain/release语法(为了保持代码的兼容性),你可以在 编译器标示 里面,使用DOS_OBJECT_USE_OBJC=0,来禁止使用基于OBJ-C的调度。

本文是本人自己辛苦翻译的,请转载的朋友注明,翻译于Z.MJun的CSDN的博客 http://blog.csdn.net/Zheng_Paul,感谢!


翻译于2016年5月12日


Grand Central Dispatch (GCD) 功能方法

创建和管理队列(Queues)

主线程 dispatch_get_main_queue

作为全局使用的队列,在使用这个方法返回队列时,调用dispatch_suspend, dispatch_resume, dispatch_set_context,这个几个方法是没有任何效果的。

全局队列 dispatch_get_global_queue

任务提交到队列里都是并行运作的。

创建队列 dispatch_queue_create

当前队列 dispatch_get_current_queue

队列属性 dispatch_queue_attr_make_with_qos_class

队列标识 dispatch_queue_get_label

目标队列dispatch_set_target_queue

主调度dispatch_main

上一篇下一篇

猜你喜欢

热点阅读