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可以是用户队列也可以使全局队列。

  • 相关阅读:
    PATA 1071 Speech Patterns.
    PATA 1027 Colors In Mars
    PATB 1038. 统计同成绩学生(20)
    1036. 跟奥巴马一起编程(15)
    PATA 1036. Boys vs Girls (25)
    PATA 1006. Sign In and Sign Out (25)
    读取web工程目录之外的图片并显示
    DOS命令
    java连接oracle集群
    servlet
  • 原文地址:https://www.cnblogs.com/alihaiseyao/p/3355902.html
Copyright © 2011-2022 走看看