zoukankan      html  css  js  c++  java
  • iOS的GCD精要

    使用线程的方式,可以通过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];
      });
    }
  • 相关阅读:
    jQuery 语法
    HTML DOM Document 对象
    JavaScript
    JavaScript Cookies
    JavaScript 计时事件
    九度OJ 1352 和为S的两个数字
    九度0J 1374 所有员工年龄排序
    九度OJ 1373 整数中1出现的次数(从1到n整数中1出现的次数)
    九度OJ 1370 数组中出现次数超过一半的数字
    九度OJ 1361 翻转单词顺序
  • 原文地址:https://www.cnblogs.com/lwzz/p/3067731.html
Copyright © 2011-2022 走看看