ios - GCD简单小结
首先GCD两个名词: 队列 同步异步.
队列: 任务放到队列,队列中的任务执行方式取决于执行队列中任务的方式---同步异步.
串行队列: 任务顺序执行,可以叫阻塞队列.只有前面任务完成才执行后面的.
并发队列: 开启新的线程执行任务,不会阻塞主线程.
同步异步:是队列中任务执行的方式,同步也就是任务在一个线程中顺序执行属于会'阻塞'主线程,异步:不会阻塞主线程,可以开启新线程.
dispatch_sync(queue, block) //同步执行
dispatch_async (queue, block) //异步执行
dispatch_after(time, queue, block) //同步延迟执行
queue第一个参数,"队列",有三种:全局队列,主队列,自己创建的队列.
全局队列:默认是并发队列,---可以开启新线程
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
并发队列第一个参数是在全局队列的优先级. 有 默认 , 高, 低,后台 四种
主队列: 串行队列
自己创建的队列:
dispatch_queue_create("com.hello", NULL)
第二个参数 NULL 代表创建的是串行队列.如果是DISPATCHQUEUECONCURRENT 代表并发队列(ios 4.3以后出现的)
线程是不安全的,多个线程在访问系统同一资源的时候会造成想不到的错误:例如银行存取钱,买票 案例
解决办法就是给线程加上锁,自带内部同步锁,或者自己创建一个同步锁,下面演示自己创建的同步锁
_syncQueue = dispatch_queue_create("com.effectiveObjectiveC.syncQueue", NULL);
- (NSString *)someString
{
__weak NSString *localSomeString;
dispatch_sync(_syncQueue, ^{
localSomeString = _someString;
});
return localSomeString;
}
- (void)setSomeString:(NSString *)someString
{
dispatch_sync(_syncQueue, ^{
_someString = someString;
});
}
ios - GCD简单小结的更多相关文章
- iOS GCD 编程小结
一.简单介绍 1.GCD简介? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD优势 GCD是苹果公司为多核的并行运算提出的 ...
- ios GCD简单介绍 后台运行~
本从实践出发简单说明: 首先,gcd是Grand Central Dispatch的缩写,意为多线程优化技术,是苹果为多核处理优化的技术.使用简单.清晰. 多线程就分同步.异步方法如下: //异步线程 ...
- iOS GCD简单使用
Grand Central Dispatch (GCD) 1)运行在主线程的Main queue,通过dispatch_get_main_queue获取. /*!* @function dispatc ...
- AJ学IOS(50)多线程网络之GCD简单介绍(任务,队列)
AJ分享,必须精品 GCD简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果 ...
- iOS GCD基础篇 - 同步、异步,并发、并行的理解
1.关于GCD - GCD全称是Grand Central Dispatch - GCD是苹果公司为多核的并行运算提出的解决方案 - GCD会自动利用更多的CPU内核(比如双核.四核) - GC ...
- iOS GCD之dispatch_semaphore(信号量)
前言 最近在看AFNetworking3.0源码时,注意到在 AFURLSessionManager.m 里面的 tasksForKeyPath: 方法 (L681),dispatch_semapho ...
- iOS上简单推送通知(Push Notification)的实现
iOS上简单推送通知(Push Notification)的实现 根据这篇很好的教程(http://www.raywenderlich.com/3443/apple-push-notification ...
- iOS CAReplicatorLayer 简单动画
代码地址如下:http://www.demodashi.com/demo/11601.html 写在最前面,最近在看学习的时候,偶然间发现一个没有用过的Layer,于是抽空研究了下,本来应该能提前记录 ...
- 前台vue的使用简单小结
前台vue的使用简单小结 本项目要求:安装有node.js 6.0以及以上安装npm使用vue.js官方安装方法初始化项目npm install安装VueResurce:npm install vue ...
随机推荐
- 20145308刘昊阳 《Java程序设计》第7周学习总结
20145308刘昊阳 <Java程序设计>第7周学习总结 教材学习内容总结 第13章 时间与日期 13.1 认识时间与日期 13.1.1 时间的度量 格林威治时间(GMT) 世界时(UT ...
- Sphinx 全量索引加实时索引
source mysql { type = mysql sql_host = 10.10.3.181 sql_user = root sql_pass = dsideal sql_db = dside ...
- ACM Haffman编码
Haffman编码 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 哈弗曼编码大家一定很熟悉吧(不熟悉也没关系,自己查去...).现在给你一串字符以及它们所对应的权值 ...
- [Cocos2D-x For WP8]Box2D物理引擎
物理引擎通过为刚性物体赋予真实的物理属性的方式来计算运动.旋转和碰撞反映.为每个游戏使用物理引擎并不是完全必要的—简单的“牛顿”物理(比如加速和减速)也可以在一定程度上通过编程或编写脚本来实现.然而, ...
- 【hdu1394】Minimum Inversion Number
Problem Description The inversion number of a given number sequence a1, a2, ..., an is the number of ...
- linux ps指令
ps axjf <==連同部分程序樹狀態
- flex的http URL转码与解码
private function httpEncoding(param:String):String{ //转码 return encodeURIComponent(param); } ...
- vim 使用笔记
vim命令笔记 a 插入 insert 插入 :%!xxd 以16进制方式进行编辑 :%!xxd -r 从16进制还原
- 【Go语言】集合与文件操作
本文目录 1.数据集合的主要操作 1_1.字典的声明 1_2.字典的初始化和创建 1_3.字典的访问和操作 1_4.其他类型的数据集 2.文件操作 2_1.文件操作概述os包和path包 2_2.文件 ...
- jQuery的常用事件
1.$(document).ready() $(document).ready()是jQuery中响应JavaScript内置的onload事件并执行任务的一种典型方式.它和onload具有类似的效果 ...