
GCD多线程编程
fswy
欲当大事,需是笃实。
展开
-
GCD学习之简单小结
1、常用的方法dispatch_async 为了避免界面在处理耗时的操作时卡死,比如读取网络数据,IO,数据库读写等,我们会在另外一个线程中处理这些操作,然后通知主线程更新界面。用GCD实现这个流程的操作比前面介绍的NSThread NSOperation的方法都要简单。代码框架结构如下:dispatch_async(dispatch_get_global_queue(DISPATCH_QUEU转载 2016-12-23 11:26:34 · 695 阅读 · 0 评论 -
GCD学习之dispatch_set_target_queue
dispatch_set_target_queue dispatch_queue_create函数生成的Dispatch Queue不管是Serial Dispatch Queue还是Concurrent Dispatch Queue,都使用与默认优先级Global Dispatch Queue 相同优先级的线程。而变更生成的Dispatch Queue的执行优先级要使用ispatch_se原创 2016-06-03 10:45:51 · 1277 阅读 · 0 评论 -
GCD学习之dispatch_after
dispatch_after 经常会有这样的情况:想要在3秒后执行处理。这种想在指定直接后执行处理的情况,可使用dispatch_after函数。 在3秒后将指定的Block追加到Main Dispatch Queue中的源代码为: dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW,3ull * NESC_PER_SEC原创 2016-06-03 10:46:42 · 1817 阅读 · 0 评论 -
GCD学习之Dispatch Group
Dispatch Group 在追加到Dispatch Queue中的多个处理全部结束后想执行结束处理,这种情况会经常出现。只使用一个Serial Dispatch Queue时,只要将想执行的处理全部追加到该Serial Dispatch Queue中并在最后追加结束处理,即可实现。但是在使用Concurrent Dispatch Queue时或同时使用多个Dispatch Queue时,源原创 2016-06-03 10:47:35 · 674 阅读 · 0 评论 -
GCD学习之dispatch_barrier_async
dispatch_barrier_async 在访问数据库或文件时,使用Serial Dispatch Queue可避免数据竞争的问题。 写入处理确实不可与其他的写入处理以及包含读取处理的其他某些问题并行执行。但是如果读取处理只是与读取处理并行执行,那么多个并行执行就不会发生问题。 为了高效率地进行访问,读取处理追加到Concurrent Dispatch Queue中,写入处理在原创 2016-06-03 10:48:13 · 1310 阅读 · 0 评论 -
GCD学习之dispatch_sync
dispatch_sync dispatch_async函数的”async”意味着”非同步”(asynchronous),就是将指定的Block”非同步”地追加到指定的Dispatch Queue中。dispatch_async不做任何等待。 dispatch_sync函数的”sync”意味着”同步”(synchronous),就是将指定的Block”同步”地追加到指定的Dispatch Que原创 2016-06-03 14:48:41 · 1070 阅读 · 0 评论 -
GCD学习之dispatch_apply
dispatch_apply dispatch_apply函数是dispatch_sync函数和Dispatch Group的关联API.该函数按指定的次数将指定的Block追加到指定的Dispatch Queue中,并等待全部处理执行结束。dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEF原创 2016-06-03 15:11:34 · 1588 阅读 · 0 评论 -
GCD学习之dispatch_suspend/dispatch_resume
dispatch_suspend/dispatch_resume 当追加大量处理到Dispatch Queue时,在追加处理的过程中,有时希望不执行已追加的处理。例如演算结果被Block截获时,一些处理会对这个演算结果造成影响。 在这种情况下,只要挂起Dispatch Queue即可。当可以执行时再恢复。 dispatch_suspend函数挂起指定的Dispatch Queue。dispat原创 2016-06-03 15:48:57 · 7813 阅读 · 0 评论 -
GCD学习之Dispatch Semaphore
Dispatch Semaphore Dispatch Semaphore是持有计数的信号,该计数是多线程编程中的计数类型信号。所谓信号,类似于过马路时常用的手旗。可以通过时举起手旗,不可通过时放下手旗。而在Dispatch Semaphore中,使用计数来实现该功能。计数为0时等待,计数为1或大于1时,减去1而不等待。 通过dispatch_semaphore_create函数生成Dispat原创 2016-06-03 16:20:08 · 844 阅读 · 0 评论 -
GCD学习之dispatch_once
dispatch_once dispatch_once函数是保证在应用程序执行中只执行一次指定处理的API。下面这种经常出现的用来进行初始化的源代码可通过dispatch_once函数简化。static int initialized = NO;if(initialized == NO){ //初始化 initialized = YES;}如果使用dispatch_once函数:原创 2016-06-03 16:26:16 · 709 阅读 · 0 评论 -
GCD学习之Dispatch I/O
Dispatch I/O 在读取较大文件时,如果将文件分成合适的大小并使用Global Dispatch Queue并列读取的话,应该会比一般的读取速度快不少。现今的输入/输出硬件已经可以做到一次使用多个线程更快地并列读取了。能实现这一功能的就是Dispatch I/O和Dispatch Data。 通过Dispatch I/O读写文件时,使用Global Dispatch Queue将一个文件原创 2016-06-03 17:21:09 · 2220 阅读 · 0 评论 -
GCD学习之GCD(Grand Central Dispatch)
GCD Grand Central Dispatch(GCD)是异步执行任务的技术之一。一般将应用程序中记述的线程管理用的代码在系统级中实现。开发者只需要定义想要执行的任务并追加到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行任务。由于线程管理是作为系统的一部分来实现的,因此可统一管理,也可执行任务,这样就比以前的线程更有效率。(摘自苹果的官方说明)dispatch_原创 2016-05-31 14:36:18 · 819 阅读 · 0 评论