
GCD
Win_77
iOS开发工程师,坐标北京,学习分享计算机开发知识。
展开
-
GCD实现和ARC、Blocks、GCD使用范例
Dispatch Queue通常,应用程序中编写的线程管理用的代码要在系统级实现。无论编程人员如何努力编写管理线程的代码,在性能方面也不可能胜过XNU内核级所实现的GCD。用于实现Dispatch Queue而使用的软件组件:libdispatch 提供技术:Dispatch Queue; Libc(pthreads) 提供技术:pthread_workqueue; XNU内核 提供技术:workqueue;GCD的API全部为包含在libdispatch库中的C语言函数。Disp原创 2021-03-07 15:46:26 · 168 阅读 · 0 评论 -
GCD的API
Dispatch Queue开发者要做的只是定义想执行的任务并追加到适当的Dispatch Queue中。是执行处理的等待队列。按照追加的顺序执行处理。有两种Dispatch Queue:Serial Dispatch Queue,等待现在执行中的任务处理结束,才处理下一个任务;Concurrent Dispatch Queue,不等待现在执行中处理结束,就开始执行下一个任务。dispatch_queue_create1、通过GCD的API生成Dispatch Queue:生原创 2021-03-02 21:12:22 · 110 阅读 · 0 评论 -
GCD概要
什么是GCD是异步执行任务的技术之一。一般将应用程序中技术的线程管理用的代码在系统级中实现。开发者只需要定义想要执行的任务并追加到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行任务。作为系统的一部分来实现的,比以前的线程更有效率。dispatch_async(queue, ^{ /** *长时间处理 * *例如AR用画像识别 *例如数据库访问 */ /** *长时间处理结束,主线程使用该处理结原创 2021-03-02 21:11:01 · 95 阅读 · 0 评论 -
通过Dispatch Group机制,根据系统资源状况来执行任务
dispatch group是GCD的一项特性,能够把任务分组。这组任务完成时,调用者会得到通知。最重要的用途,把将要并发执行的多个任务合为一组。把任务编组,有两种办法:1、dispatch_group_async(dispatch_group_t _Nonnull group, dispatch_queue_t _Nonnull queue, ^{ });2、dispatch_group_enter(dispatch_group_t _Nonnull g原创 2021-01-25 15:04:47 · 266 阅读 · 0 评论 -
掌握GCD及NSOperationQueue的使用时机
有时候GCD不一定好用,NSOperationQueue更适合需求1、取消某个操作;2、指定操作间的依赖关系;3、通过键值观察机制(kvo)监控NSOperation对象的属性;4、指定操作的优先级;5、重用NSOperation对象。系统中用到NSOperationQueue的地方[[NSNotificationCenter defaultCenter] addObserverForName:(nullable NSNotificationName) object:(null原创 2021-01-24 23:12:40 · 204 阅读 · 0 评论 -
多用GCD,少用performSelector系列方法
performSelector系列方法是什么?SEL selector;if (/*一些条件*/){ selector = @selector(foo);}else if (/*其他一些条件*/){ selector = @selector(bar);}else{ selector = @selector(baz);}[self performSelector:selector];[self performSelector:(SEL) withObje原创 2021-01-24 22:50:43 · 187 阅读 · 0 评论 -
不要使用dispatch_get_current_queue
从iOS6.0版本起,已经正式启用此函数了。该函数有种典型的错误用法,就是用它检测当前队列是不是某个特定的队列。因为派发队列之间有层级关系,所以无法准确判断运行队列,最好的办法是通过GCD所提供的功能来设定”队列特有数据“,此功能可以把任意数据以键值对的形式关联到队列里。dispatch_queue_t queueA = dispatch_queue_create("EOCQueueA", NULL);dispatch_queue_t queueB = dispatch_queue_crea原创 2021-01-25 16:20:21 · 148 阅读 · 0 评论 -
使用dispatch_once来执行只需运行一次的线程安全代码
GCD引入了一项特性,能使单例实现起来更为容易。通过传入标记参数,保证块里面的代码只执行一次。+(id)sharedInstance{ static EOCClass *sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^ { sharedInstance = [[self alloc] init]; }); ret原创 2021-01-25 15:28:02 · 412 阅读 · 0 评论