GCD,大家都知道的回顾

GCD,自iOS4.0吧,比block还要早,他的用处主要是体现在线程方面,比如你有个比较麻烦的而且循环比较大的代码段什么,比如有个后台下载什么的,这都必须放在子线程里一个放在子线程里执行,为了不影响用户体验!

来说说几个很基本的东西方便了解:

串行

系统默认就有一个串行队列main_queue,也就是主线程所在的队列,因为是串行,所以可以认为通过这个回到主线程

自定义dispatch_queue_create([queueName cStringUsingEncoding:NSUTF8StringEncoding],
                            DISPATCH_QUEUE_CONCURRENT);(queueName 自定义的串行队列的名称)

执行一般是dispatch_get_main_queue()

 

 

并行

系统默认就有一个并行队列global_queue

自定义dispatch_queue_create([queueName cStringUsingEncoding:NSUTF8StringEncoding],
                            DISPATCH_QUEUE_SERIAL);

关于并行,有个优先级的问题,看看系统给的,2,0 ,-2 和最小。。。

 

#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_get_global_queue(这里是填优先级, 这个值可以看说明默认是0);

 

一般经常干的事是什么呢

dispatch_async(这里是并发, ^{

  // long-running task code here
        dispatch_async(这里是串行,^{

      //update UI code here

          });
    });

线程的延时操作

dispatch_time(DISPATCH_TIME_NOW(这个是以程序执行的时间点), seconds * NSEC_PER_SEC(这里是设定精确级别的));

dispatch_after(dispatch_time_t when(这个就是上面生成的一个time),dispatch_queue_t queue(队列),dispatch_block_t block(延迟执行的语句));

线程组

dispatch_group_create()创建一个组

可以用来监控一个group里的内容是否执行完成

dispatch_group_notify(dispatch_group_t group,

            dispatch_queue_t queue,

            dispatch_block_t block);

很奇特的GCD,不是么,group是一个个执行的,但是在这其中,不管你是并行或串行,根本就不会按你所想的规矩来,特别是并发的,当你加入一个group里面他可不会按你代码排的顺序来执行(包括串行),但是最终肯定会执行dispatch_group_notify参数里面的block语句。

GCD定时器

写成一个内联函数

NS_INLINE dispatch_source_t GCD_create_timer(int64_t seconds, dispatch_queue_t queue, void (^block)(dispatch_source_t timer))
{
    //创建Timer
   
    dispatch_source_t _timer =dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
    
    //使用dispatch_source_set_timer函数设置timer参数
    dispatch_source_set_timer(_timer,
                                    dispatch_time(DISPATCH_TIME_NOW, 0),
                                    seconds * NSEC_PER_SEC,
                                    0);
      
    //设置回调
    dispatch_source_set_event_handler(_timer, ^(){
                                          block(_timer);
                                      });
    
    //dispatch_source默认是Suspended状态,通过dispatch_resume函数开始它
    dispatch_resume(_timer);
    return _timer;
}

用完记得释放,否则。。。。(ARC可以不考虑,看看里面的实现吧!)

 

至于同步的。。。你觉得这有讨论的必要么,好吧,我确实不知道同步用在那些地方!

 

转载于:https://www.cnblogs.com/lingzhiguiji/p/3709592.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对逻辑数据库的操作

使用数据库语言时,一定要注意以分号结尾( ;)1、创建数据库CREATE DATABASE 数据库名; CREATE DATABASE Scores;//创建指定名称的数据库,字符集使用的是“安装数据库时的指定的字符集”;CREATE DATABASE 数据库名 CHARACTER SET 字…

数据库---表的操作

1、创建表格式 : create table 表名(字段名1 类型(长度) 约束,字段名2 类型(长度) 约束,... ); 示例: CREATE TABLE stu(id INT PRIMARY KEY , #primary key:设置为主键,被修饰为主键的数据,不能…

auto_ptr解析

转自 http://www.cppblog.com/SmartPtr/archive/2007/07/05/27549.htmlauto_ptr解析auto_ptr是当前C标准库中提供的一种智能指针,或许相对于boost库提供的一系列眼花缭乱的智能指针, 或许相对于Loki中那个无所不包的智能指针,这个不怎么智能…

Spring——自定义属性编辑器+Bean的生存范围+Bean的生命周期

一、自定义属性编辑器(一个类): 步骤: 1.写一个类,这个类继承PropertyEditorSupport。 2.重写setAsText()方法。 3.在bean.xml文件中添加属性编辑器的bean。 例子:点击打开链接 二、Bean的生存范围&#xf…

数据库---增删改查

1、添加数据INSERT INTO 表名(字段名1,字段名2...) values(值1,值2...); INSERT INTO newstu(id,name)values(12,胡歌);INSERT INTO 表名 values(值1,值2); INSERT INTO newstu values(12,胡歌); 注意: 值与字段必须一一对应,且个数相同&…

数据库---查询(详细)

1、查询 SELECT * FROM 表名 WHERE 条件; (1)、SELECT * FROM 表名;#查询表内的所有数据 SELECT * FROM PRODUCT;(2)、SELECT 字段1,字段2... FROM 表名;#查询表内的指定字段的数据 SELECT PIN,PRICE FROM PRODUCT; (3)、SELECT * FRO…

微信公众平台开发接口PHP SDK完整版

官方提供的SDK只有一个文本消息功能,我们将所有消息的消息类型及事件响应都整理了进来,并且加入日志记录,代码如下: 更新日志: 2013-01-01 版本1.02014-03-15 增加图片、视频、语音的内容回复2014-04-09 增加菜单链接事…

BZOJ3570 : DZY Loves Physics I

考虑两个质量均为m,速度分别v1、v2的小球发生完全弹性碰撞的影响: 由动能守恒得: $\frac{1}{2}mv_1^2\frac{1}{2}mv_2^2\frac{1}{2}mv_1^2\frac{1}{2}mv_2^2$$v_1^2v_2^2v_1^2v_2^2$ 由动量守恒得: $mv_1mv_2mv_1mv_2$$v_1v_2v_1v…

数据库---主键约束

1、设置主键约束(1)、方式一:创建表时,在字段在描述处声明指定字段为主键; CREATE TABLE 表名(字段 类型(长度) PRIMARY KEY,字段 类型(长度) );CREATE TABLE STUDENT(STU_ID INT PAIMARY KEY,STU_NAME VARCHAR(255) );(2)、方式二&#xff1…

关于VS2010帮助文档的使用和VC6.0在Win7 64位下的使用

由于购置了新的电脑,安装的是Win7 64位的操作系统,这两天我在重新安装编程环境的时候遇到一些问题,现在都解决掉了,分享出来以供需要的人参考。 一、以前使用的是VS2008,从VC6到2008这么多年了一只使用的MSDN是带索引的…

数据库---聚合查询

聚合查询:纵向查询,它是对一列的值进行计算,然后返回一个单一的值;另外聚合查询是忽略空值。 count:统计指定列不为NULL的记录行数;sum:计算指定列的数值和,如果指定列类型不是数…

【记忆法】心智绘图

心智绘图方法 1.提出具体、明确的记忆任务(以30min为单位) 记忆25min休息5min2.及时复习,减少遗忘(记忆关键字) 看到关键词能够回想起全部的内容。看到关键词能够产生生动的图像。3.平时多背诵 有时间多记一些小东西、小片段4.复述和再现 听到或看到什么好的故事要及…

数据库---分组查询

一、分组查询:指使用group by字句对查询信息进行分组。格式: SELECT 字段1,字段2... FROM 表名 GROUP BY 分组字段 HAVING 分组条件; 分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件。 1、having与…

centos安装coreseek

安装依赖 yum install make gcc g gcc-c libtool autoconf automake imake mysql-devel libxml2-devel expat-devel 下载coreseek 4.1 $ wget http://www.coreseek.cn/uploads/csft/4.0/coreseek-4.1-beta.tar.gz $ tar xzvf coreseek-4.1-beta.tar.gz $ cd coreseek-4.1-beta…

HTML---HTML简介

1、HTML简介:*什么事HTML? -HypperText Markup Language:超文本标记语言,网页语言。**超文本:超出文本的范畴,使用HTML可以轻松实现简单操作。**标记:HTML所有的操作都是通过标记实现的&…

谷歌Android各版本的代号变迁

简单回顾下Android发展历程2003年10月,Andy Rubin(安迪鲁宾)等人创建Android公司,并组建Android团队。2005年8月17日,Google低调收购了成立仅22个月的高科技企业Android及其团队。安迪鲁宾成为Google公司工程部副总裁&…

HTMLL---HTML中常用标签(文字、注释标签)

1、文字标签和注释标签*文字标签和注释标签- <font></font>-属性* size:文字的大小&#xff0c;取值范围1-7&#xff0c;超出7默认为7* color:文字的颜色-两种表示方式**英文单词&#xff1a; red, green, blue, black, white, yellow, gray**使用十六进制数表示&a…

Map.Entry

如何简便的遍历Map 你是否已经对每次从Map中取得关键字然后再取得相应的值感觉厌倦&#xff1f; 使用JDK5的增强for循环&#xff0c;来遍历Map,简单多了&#xff0c;比Map.Entry还方便。 看代码&#xff1a; Java代码 for (String key : map.keySet()) { System.out.pri…

HTML---HTML中常用的标签(标题,水平,特殊标签)

1、标题标签、水平标签和特殊字符*标题标签- <h1>... </h1>、 <h2>... </h2>、 <h3>... </h3>、... <h6>... </h6>-特点&#xff1a;从h1到h6字体由大到小、同时 自动换行。*水平标签- <hr/>-属性** size&#xff1a;水…

图解SQL的inner join(join)、left join、right join、full outer join、union、union all的区别...

对于SQL的Join&#xff0c;在学习起来可能是比较乱的。我们知道&#xff0c;SQL的Join语法有很多inner的&#xff0c;有outer的&#xff0c;有left的&#xff0c;有时候&#xff0c;对于Select出来的结果集是什么样子有点不是很清楚。Coding Horror上有一篇文章,通过文氏图 Ven…