下面這三篇文檔講了GCD使用的很多場景和技巧帆啃,感覺值得一看
https://developer.apple.com/library/archive/documentation/General/Conceptual/ConcurrencyProgrammingGuide/GCDWorkQueues/GCDWorkQueues.html#//apple_ref/doc/uid/TP40008091-CH103-SW13
這個文檔講述了Dispatch Sources的使用猪贪。
dispatch source 將你想觀察的事件,dispatch queue和處理事件響應(yīng)的代碼關(guān)聯(lián)在一起,當(dāng)你創(chuàng)建一個dispatch source時命黔,它默認是掛起(suspend)狀態(tài),這讓你有時間完成對他的配置掰伸,當(dāng)你想讓它響應(yīng)事件時想际,你需要resum培漏。
dispatch source會和一個queue關(guān)聯(lián),你可以change queue胡本,但是如果你的事件已經(jīng)加入了queue牌柄,那么該事件就會在之前的queue中執(zhí)行,當(dāng)執(zhí)行完成后侧甫,后續(xù)的事件會在新的queue中去執(zhí)行珊佣。
你可以給dispatch source設(shè)置一個取消事件的響應(yīng)(Cancellation Handler),通常情況下披粟,你不需要這么做咒锻,但是如果你需要做釋放資源的操作守屉,比如關(guān)閉一個文件描述符,那么你需要這樣去操作
dispatch object是需要用戶自己去管理引用計數(shù)的滨巴,如果你想持有或者銷毀它恭取,需要調(diào)用 dispatch_retain and dispatch_release函數(shù)
文檔下半部分舉了timer,socket(Reading data from a file蜈垮、Writing data to a file柠横、Watching for filename changes),Monitoring Signals晨继、Monitoring Signals的例子搬俊,值得一看
https://developer.apple.com/library/archive/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html#//apple_ref/doc/uid/TP40008091-CH102-SW1
這個文檔講述了Dispatch Queues的使用
我們可以創(chuàng)建同步隊列,并行隊列餐屎,我們可以設(shè)定隊列執(zhí)行的優(yōu)先級腹缩,向隊列添加任務(wù),我們可以設(shè)置在任務(wù)結(jié)束后執(zhí)行某個block藏鹊,我們可以使用dispatch_apply去代替for循環(huán),我們可以對queue進行suspend和resume操作楚殿,我們可以使用信號量對有限的資源進行控制脆粥,我們可以使用group去進行同步操作影涉,dispatch queue本身不需要用戶進行release,retain操作,如果你這樣做了常潮,它會被簡單的忽略喊式,dispatch queue本身是線程安全的,注意gcd的死鎖問題* Do not call the [dispatch_sync]
function from a task that is executing on the same queue that you pass to your function call. Doing so will deadlock the queue. If you need to dispatch to the current queue, do so asynchronously using the [dispatch_async]
function.當(dāng)你想做順序操作時夏哭,應(yīng)當(dāng)使用同步隊列献联,而不是使用鎖。Avoid taking locks from the tasks you submit to a dispatch queue. Although it is safe to use locks from your tasks, when you acquire the lock, you risk blocking a serial queue entirely if that lock is unavailable. Similarly, for concurrent queues, waiting on a lock might prevent other tasks from executing instead. If you need to synchronize parts of your code, use a serial dispatch queue instead of a lock.值得一看
https://developer.apple.com/library/archive/documentation/General/Conceptual/ConcurrencyProgrammingGuide/ThreadMigration/ThreadMigration.html#//apple_ref/doc/uid/TP40008091-CH105-SW18
這個文檔講了如何從Thread遷移到GCD
其中使用dispatch_apply代替for循環(huán)进胯,使用同步隊列代替runloop胁镐,dispatch_sync正確使用都是不錯的技巧诸衔,值得一看
GCD
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門椅野,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竟闪,“玉大人杖狼,你說我怎么就攤上這事〉” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵嗽上,是天一觀的道長熄攘。 經(jīng)常有香客問我,道長烹看,這世上最難降的妖魔是什么惯殊? 我笑而不...
- 正文 為了忘掉前任也殖,我火速辦了婚禮,結(jié)果婚禮上己儒,老公的妹妹穿的比我還像新娘。我一直安慰自己冲甘,他們只是感情好途样,可當(dāng)我...
- 文/花漫 我一把揭開白布何暇。 她就那樣靜靜地躺著裆站,像睡著了一般。 火紅的嫁衣襯著肌膚如雪羽嫡。 梳的紋絲不亂的頭發(fā)上胳嘲,一...
- 文/蒼蘭香墨 我猛地睜開眼醉冤,長吁一口氣:“原來是場噩夢啊……” “哼蚁阳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起螺捐,我...
- 正文 年R本政府宣布癣亚,位于F島的核電站,受9級特大地震影響获印,放射性物質(zhì)發(fā)生泄漏述雾。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一兼丰、第九天 我趴在偏房一處隱蔽的房頂上張望玻孟。 院中可真熱鬧,春花似錦鳍征、人聲如沸黍翎。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽匣掸。三九已至,卻和暖如春氮双,著一層夾襖步出監(jiān)牢的瞬間碰酝,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 談到iOS多線程惯悠,一般都會談到四種方式:pthread筒严、NSThread、GCD和NSOperation娶视。其中,蘋...
- 轉(zhuǎn)載自:http://www.reibang.com/p/665261814e24 談到iOS多線程,一般都會談到...
- 現(xiàn)在iOS的多線程方案主要有以下這幾種: GCD(Grand Central Dispatch):使用dispat...
- 程序中同步和異步是什么意思弛饭?有什么區(qū)別档桃? 解釋一:異步調(diào)用是通過使用單獨的線程執(zhí)行的。原始線程啟動異步調(diào)用嘹屯,異步調(diào)...