GCD

来源:互联网 发布:盐城数据产业园能去吗 编辑:程序博客网 时间:2024/03/28 22:09

GCD补充

有 3 种分派队列: 

Main Queue

这个队列在主线程上执行它的所有任务,Cocoa 和 Cocoa Touch 允许程序员在主线程上调用一切UI- related 方法。使用 dispatch_get_main_queue 函数检索到主队列的句柄。


Concurrent Queues为了执行异步和同步任务,你可以在 GCD 中检索到这写队列。多个并发队列能够轻而易举的并行执行多

个任务,没有更多的线程管理,酷!使用 dispatch_get_global_queue 函数检索一个并发队列的句柄。


 Serial Queues

无论你提交同步或者异步任务,这些队列总是按照先入先出(FIFO)的原则来执行任务,这就意味着它 们一次执行一个 Block Object。然而,他们不在主线程上运行,所以对于那些要按照严格顺序执行并不阻塞主 线程的任务而言是一个完美的选择。使用 dispatch_queue_create 函数创建一个串行队列。一旦你使用完整队 列,必须使用 dispatch_release 函数释放它



这儿简单总结关于 Block Objects 变量你必须了解的特点:

1、局部变量在 Block Objects 和 Objective-C 方法中的工作原理非常相似。


2、对于内联 Block Objects,局部变脸不仅包含 Block 内部定义的变量,并且包含在 Block Objects 执行方法中定义的变量。


3、你不能参考 self;在 Objective-C 类中运行的独立 Block Objects,如果你需要访问 self, 就必须把 Object作为参数传递到 BlockObject


4、只有当 self 出现在创建 Block Object 的词法范围内,你可以在内联 Block Object 内参考 self。


5、对于内联 Block Objects,那些在 BlockObject 执行过程中定义的局部变量是可读写的,换句话说,对于Block Objects 自身的局部变量来说,Block Objects 有个读写存取。


6、对于内联 Block Objects,实现 Object 的 Objective-C 方法的局部变量只能从中读取,不能写入。不过还有一个例外,如果定义它们通过 __block 存储类型定义的话,Block Object 可以写入此类的变

量。


7、假设你有一个类 NSObject 的 Object,并且在这个 Object 的执行中你使用了一个 Block Object 与 GCD相连,那么在这个 Block Object 内部,你会有一个存储来读取那个支持你的 Block 执行的 NSObject内部的声明属性。

原创粉丝点击