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总结
很长时间以来,我个人(可能还有很多同学),对多线程编程都存在一些误解.一个很明显的表现是,很多人有这样的看法: 新开一个线程,能提高速度,避免阻塞主线程 毕竟多线程嘛,几个线程一起跑任务,速度快,还不 ...
随机推荐
- 最长下降子序列O(n^2)及O(n*log(n))解法
求最长下降子序列和LIS基本思路是完全一样的,都是很经典的DP题目. 问题大都类似于 有一个序列 a1,a2,a3...ak..an,求其最长下降子序列(或者求其最长不下降子序列)的长度. 以最长下降 ...
- Daily Scrum02 12.16
鉴于近期数据库大作业提交到了关键时期,大家的时间都十分的紧张,因而,我们决定全团队成员交替作业,不在每日每个成员都分配任务,而只需要每个成员保证每两天一次的工作量,以此方式给大家腾出去完成自己的事情. ...
- SSE: server-sent events
当客户端需要定时轮询服务器获取一些消息的时候,可以使用 servser-sent events .NET 服务端: public void ProcessRequest(HttpContext con ...
- jQuery中事件与动画的总结
1.加载DOM 1.1.window事件 window.onload=function(){}.... 时机:其他资源都加载完毕后,再执行 $(function(){}) ……:只是 ...
- 移动端图片上传base64编码
$base64 = "/9j/4AAQSkZJRgABAQEAkACQAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAA ...
- sscanf_强大的数据读取-转换
function <cstdio> sscanf int sscanf ( const char * s, const char * format, ...); Read formatte ...
- WPF整理-Mutex确保Application单例运行
有时我们不希望我们的WPF应用程序可以同时运行有多个实例,当我们试图运行第二个实例的时候,已经运行的实例也应该弹出来. 我们可以用Mutex来实现 打开App.xaml.cs,在App类中添加如下内容 ...
- JSP :运行最简单的 JSP 程序
160916 1. 代码和显示效果 <%@ page contentType="text/html; charset=GB2312" %> <%@ page im ...
- LoadingView
// // LoadingView.h // 蓝桥播报 // // Created by 小小建 on 15/7/10. // Copyright (c) 2015年 蓝桥. All righ ...
- C# 6.0 功能预览 (二)
在Language Feature Status上面看到,其实更新的并不是特别多,为了不会误导看了C# 6.0 功能预览 (一)的园友,现在把官方的更新列表拿了过来,供大家参考 Roslyn 编译平台 ...