zoukankan      html  css  js  c++  java
  • 关于OC队列

    GCD中有三种队列类型:

    1. The main queue: 与主线程功能相同。实际上,提交至main queue的任务会在主线程中执行。main queue可以调用dispatch_get_main_queue()来获得。因为main queue是与主线程相关的,所以这是一个串行队列
    2. Global queues: 全局队列是并发队列,并由整个进程共享。进程中存在三个全局队列:高、中(默认)、低三个优先级队列。可以调用dispatch_get_global_queue函数传入优先级来访问队列。
    3. 用户队列: 用户队列 (GCD并不这样称呼这种队列, 但是没有一个特定的名字来形容这种队列,所以我们称其为用户队列) 是用函数 dispatch_queue_create 创建的队列. 这些队列是串行的。正因为如此,它们可以用来完成同步机制, 有点像传统线程中的mutex。

    同步方式:

    1.

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
          这个里面的任务只能在,非主线程中完成 
    });
     
    2.
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
             非主线程中执行任务:
            dispatch_async(dispatch_get_main_queue(), ^{
                主线程中执行任务:
            });
    });
     
    异步的方式:

    我们还可以使用更好的方法来完成这件事——使用更“异步”的风格。不同于取界面层的值时要阻塞后台线程,你可以使用嵌套的block来中止后台线程,然后从主线程中获取值,然后再将后期处理提交至后台线程:

    dispatch_queue_t bgQueue = myQueue;
        dispatch_async(dispatch_get_main_queue(), ^{
            NSString *stringValue = [[[textField stringValue] copy] autorelease];
            dispatch_async(bgQueue, ^{
                // use stringValue in the background now
            });
        });

    取决于你的需求,myQueue可以是用户队列也可以使全局队列。

  • 相关阅读:
    H5小游戏的坑点小结
    禁用iOS的UIView长按默认操作
    chrome诡异的Provisional headers are shown
    手机浏览器音频内核的坑
    libuv在cocos2d-x中的使用
    windows下codelite的使用
    windows下clang的安装与使用
    ztree选父不选子选子不选父
    <c:forEach>判断第一条或最后一条记录
    iframe高度自适应的方法
  • 原文地址:https://www.cnblogs.com/alihaiseyao/p/3355902.html
Copyright © 2011-2022 走看看