博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS的GCD精要
阅读量:6844 次
发布时间:2019-06-26

本文共 953 字,大约阅读时间需要 3 分钟。

使用线程的方式,可以通过GCD。

并发的后台任务,可以通过创建并发列队来实现。全局列队就是一个并发列队

并发列队,执行的时候是并发的,GCD实现的时候会开启多线程。

串行列队,任务可以异步的放入队列,执行的时候会按照FIFO的顺序执行。因为是串行的,同一个串行列队不会有并发带来的各种问题。如果是主列队则不会创建新线程。

dispatch_async 时会拷贝 block,当拷贝 block 的时间大于执行 block 的时间时,dispatch_async 的速度会比 dispatch_sync 速度更慢。所以实际情况应根据 block 所执行任务的繁重程度来决定使用 dispatch_async 还是 dispatch_sync。

多个获取方法可以并发执行,获取方法与设置方法不能并发执行。据此可以使用全局并发队列和 GCD 的 dispatch_barrier_async 来实现。

dispatch_barrier_async函数,在该方法执行之前,之后的block是没有添加到队列中去的。dispatch_barrier_async会等待concurrent上的任务全部结束之后,再将指定的任务追加到队列中,然后dispatch_barrier_async函数追加的处理执行完后,concurrent队列开始并行执行。

 

- (id)objectAtIndex:(NSUInteger)index {  __block id obj;  dispatch_sync(self.concurrentQueue, ^{    obj = [self.array objectAtIndex:index];  });   return obj;}- (void)insertObject:(id)obj atIndex:(NSUInteger)index {   dispatch_barrier_async(self.concurrentQueue, ^{    [self.array insertObject:obj atIndex:index];  });}

 

转载于:https://www.cnblogs.com/lwzz/archive/2013/05/08/3067731.html

你可能感兴趣的文章
使用Elasticsearch快速搭建食谱搜索系统
查看>>
LVS 三种工作模式原理、以及优缺点比较
查看>>
raid1+0磁盘阵列创建、性能测试与故障模拟
查看>>
电脑启动流程
查看>>
DHCP
查看>>
JVM结构、GC工作机制详解
查看>>
VMware Horizon FLEX介绍
查看>>
Spring装配Bean---使用xml配置
查看>>
CentOS5 sendmail服务器配置
查看>>
DNS搭建
查看>>
JS如何实现对name是数组的复选框的全选和反选以及取消选择
查看>>
Java NIO 之 Buffer
查看>>
mysql基本使用
查看>>
BASH相关
查看>>
linux 文件类型 时间戳 ls bash特性四 文件查看命令 cp move echo
查看>>
NetScaler的部署实验之八更新StoreFront的配置更改
查看>>
window Linux 系统安装盘制作
查看>>
**15.app后端怎么设计用户登录方案(API权限安全)
查看>>
Linux的PXE kickstart网络自动装机
查看>>
linux系统学习第九天-<<工程师技术>>
查看>>