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.pswp.cn/news/273766.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273766.shtml
英文地址,請注明出處:http://en.pswp.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…