ios多线程-GCD基本用法
ios中多线程有三种,NSTread, NSOperation,GCD
这篇就讲讲GCD的基本用法
平时比较多使用和看到的是:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ), ^{
//异步操作代码块
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, ) 其中第一个参数,是队列优先级,有四种: #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
感谢作者如此深入的分析,受益匪浅
ios多线程-GCD基本用法的更多相关文章
- iOS多线程 GCD常见用法
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispat ...
- iOS多线程 GCD
iOS多线程 GCD Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main que ...
- iOS 多线程 GCD part3:API
https://www.jianshu.com/p/072111f5889d 2017.03.05 22:54* 字数 1667 阅读 88评论 0喜欢 1 0. 预备知识 GCD对时间的描述有些新奇 ...
- iOS 多线程GCD的基本使用
<iOS多线程简介>中提到:GCD中有2个核心概念:1.任务(执行什么操作)2.队列(用来存放任务) 那么多线程GCD的基本使用有哪些呢? 可以分以下多种情况: 1.异步函数 + 并发队列 ...
- iOS多线程GCD
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispat ...
- iOS多线程GCD(转)
转自:http://www.cnblogs.com/pure/archive/2013/03/31/2977420.html Grand Central Dispatch (GCD)是Apple开发的 ...
- iOS多线程GCD 研究
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispat ...
- iOS多线程GCD(转)
原文:http://www.cnblogs.com/pure/archive/2013/03/31/2977420.html Grand Central Dispatch (GCD)是Apple开发的 ...
- iOS多线程——GCD与NSOperation总结
很长时间以来,我个人(可能还有很多同学),对多线程编程都存在一些误解.一个很明显的表现是,很多人有这样的看法: 新开一个线程,能提高速度,避免阻塞主线程 毕竟多线程嘛,几个线程一起跑任务,速度快,还不 ...
随机推荐
- JavaIO 将数据写入到文件中去
package com.Practice_FileWriter; import java.io.FileWriter; import java.io.IOException; public class ...
- System.Web.HttpContext.Current.Session为NULL解决方法
http://www.cnblogs.com/tianguook/archive/2010/09/27/1836988.html 自定义 HTTP 处理程序,从IHttpHandler继承,在写Sys ...
- RecyclerView添加Header的正确方式
原文链接:http://blog.csdn.net/qibin0506/article/details/49716795 看了一下博客目录,已经有好几篇博客是关于RecyclerView的,不过对于这 ...
- CI框架,双层弹出框的样式实现
在弹出的主页面上,写一个隐藏的悬浮的div 通过标记使他显示,通过计数器使他关闭 部分代码: <div id="common_msg"></div>//主页 ...
- C# WinForm 中英文实现, 国际化实现的简单方法
来源:http://www.jb51.net/article/45675.htm,今天看到了借鉴过了,保存一下,下次开发直接用嘻嘻 软件行业发展到今天,国际化问题一直都占据非常重要的位置,而且应该越来 ...
- Linux系统的理解及学习Linux内核的心得
作业列表 (点击作业跳转) linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作 linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核 ...
- openCV C++ 代码笔记
代码片段1 cv_contourMask_step_tmp=cv_contourMask.clone(); cv::Mat maskImage; UIImageToMat(pathimg, maskI ...
- UI控件(UITextView)
@implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //UITextView与UITextField主要 ...
- log4j2.xml实用例子
一个多月前,我写了篇关于log4j.xml配置的文章,点击此处查看:http://www.cnblogs.com/guogangj/p/3931397.html 最近,我把自己的log4j升级到2.0 ...
- ASP.NET Web API的Controller是如何被创建的?
Web API调用请求的目标是定义在某个HttpController类型中的某个Action方法,所以消息处理管道最终需要激活目标HttpController对象.调用请求的URI会携带目标HttpC ...