• ios多线程-GCD基本用法


    ios中多线程有三种,NSTread, NSOperation,GCD

    这篇就讲讲GCD的基本用法

    平时比较多使用和看到的是:

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    
            //异步操作代码块
    
            dispatch_async(dispatch_get_main_queue(), ^{
    
                //回到主线程操作代码块
    
            });
    
        });

    比较多的用于更新ui操作

    比如从数据库获取数据需要花较长的时间,又不希望卡主线程,就把获取数据库数据操作放在异步操作代码快中,等获取结束,回调主线程,更新ui,在主线程操作代码块中进行操作

    下面我们来解析一下这代码块中的每个方法:

    dispatch_async(<#dispatch_queue_t queue#>, <#^(void)block#>)
    
    表示异步操作,与之对应的是
    
    dispatch_sync(<#dispatch_queue_t queue#>, <#^(void)block#>),同步操作,block中的代码执行完了才能执行后面的操作
    
    方法中第一个参数 dispatch_queue_t queue 表示队列,无非是两种:串行和并行,另外可自建串行或并行队列
    获取系统串行队列,也就是主线程串行队列:
    
    dispatch_get_main_queue()
    
    获取系统并行队列:
    
    dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
    
    其中第一个参数,是队列优先级,有四种:
    
    #define DISPATCH_QUEUE_PRIORITY_HIGH 2
    
    #define DISPATCH_QUEUE_PRIORITY_DEFAULT 0
    
    #define DISPATCH_QUEUE_PRIORITY_LOW (-2)
    
    #define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN
    
    会根据优先级高低,进行处理
    
    自建队列:
    
    dispatch_queue_create("com.example.serial", NULL);
    
    第一个参数,文档规范说:
    A string label to attach to the queue.这个字符串需要唯一性,一般是以上形式呈现
    
    第二个参数传NULL或者 DISPATCH_QUEUE_SERIAL 表示串行
    传 DISPATCH_QUEUE_CONCURRENT表示并行
    
    当执行结束,必须要有 dispatch_release(),将队列释放

    最近看到一篇文章讲到GCD, 比较深入,还有些没有理解,以上我描述的内容是GCD较为基础的用法,一般程序也就用到这些

    http://justsee.iteye.com/blog/1883409

    感谢作者如此深入的分析,受益匪浅

  • 相关阅读:
    删除重复数据
    jquery删除文件
    统计目录下文件数及大小
    koa generator
    如何做单测? 单测和开发占比应该是多少?集成测试
    webpack之loader和plugin简介
    服务端渲染
    请求头包含哪些部分
    vue的高阶组件
    amd,cmd规范
  • 原文地址:https://www.cnblogs.com/strick/p/4053869.html
Copyright © 2020-2023  润新知