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 · 126 阅读 · 0 评论 -
GCD的API
Dispatch Queue 开发者要做的只是定义想执行的任务并追加到适当的Dispatch Queue中。 是执行处理的等待队列。按照追加的顺序执行处理。 有两种Dispatch Queue: Serial Dispatch Queue,等待现在执行中的任务处理结束,才处理下一个任务; Concurrent Dispatch Queue,不等待现在执行中处理结束,就开始执行下一个任务。 dispatch_queue_create 1、通过GCD的API生成Dispatch Queue: 生原创 2021-03-02 21:12:22 · 78 阅读 · 0 评论 -
GCD概要
什么是GCD 是异步执行任务的技术之一。一般将应用程序中技术的线程管理用的代码在系统级中实现。开发者只需要定义想要执行的任务并追加到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行任务。作为系统的一部分来实现的,比以前的线程更有效率。 dispatch_async(queue, ^ { /** *长时间处理 * *例如AR用画像识别 *例如数据库访问 */ /** *长时间处理结束,主线程使用该处理结原创 2021-03-02 21:11:01 · 61 阅读 · 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 · 208 阅读 · 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 · 147 阅读 · 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 · 150 阅读 · 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 · 105 阅读 · 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 · 360 阅读 · 0 评论