博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios多线程-GCD基本用法
阅读量:5281 次
发布时间:2019-06-14

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

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

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

 

转载于:https://www.cnblogs.com/strick/p/4053869.html

你可能感兴趣的文章
HashMap循环遍历方式
查看>>
React Native 入门 调试项目
查看>>
C# 通过 Quartz .NET 实现 schedule job 的处理
查看>>
关于java之socket输入流输出流可否放在不同的线程里进行处理
查看>>
目前为止用过的最好的Json互转工具类ConvertJson
查看>>
Day13
查看>>
tensorflow saver简介+Demo with linear-model
查看>>
Luogu_4103 [HEOI2014]大工程
查看>>
Oracle——SQL基础
查看>>
项目置顶随笔
查看>>
Redis的安装与使用
查看>>
P1970 花匠
查看>>
java语言与java技术
查看>>
NOIP2016提高A组五校联考2总结
查看>>
iOS 项目的编译速度提高
查看>>
table中checkbox选择多行
查看>>
Magento开发文档(三):Magento控制器
查看>>
性能调优攻略
查看>>
ie6解决png图片透明问题
查看>>
瞬间的永恒
查看>>