版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
無限互聯(lián)是國內(nèi)唯一一家專注于
和iPad開發(fā)培訓(xùn)機(jī)構(gòu),到目前為研發(fā)人才。隨著iOS7系統(tǒng)的發(fā)布,,手把
您寫代碼,從入止為各大公司輸送了一大批優(yōu)秀的iOS高級(jí)也在陸續(xù)發(fā)布國內(nèi)首套完整的iOS開發(fā)的門到熟練再到精通。高薪就業(yè)是檢驗(yàn)一家培訓(xùn)機(jī)構(gòu)質(zhì)量的唯一標(biāo)準(zhǔn),最好的肯定,也是
前進(jìn)的最
動(dòng)力,
感謝的學(xué)員高薪就業(yè)是對(duì)的努力,感謝對(duì)的支持!
也將免費(fèi)為
提供最好的就業(yè)后的技術(shù)支持!,
的高薪就業(yè)才是
最大的成功!G
r
a
n
d
Central
Dispatch主講:本節(jié)內(nèi)容隊(duì)列的概念······任務(wù)的追加、掛起、恢復(fù)隊(duì)列的優(yōu)先級(jí)控制一次任務(wù)、延時(shí)任務(wù)組任務(wù)任務(wù)信號(hào)量·實(shí)現(xiàn)功能輕量、優(yōu)雅,使得它在很多地方比之專門創(chuàng)建消耗資源的線程更自動(dòng)根據(jù)系統(tǒng)負(fù)載來增減線程數(shù)量,這就減少了上下文切換以及增加了計(jì)(
G
r
a
n
d
Central
Dispatch)·
Apple提供的一套更底層、更高效的并發(fā)編程技術(shù),純C語言、基于Block支持同步或異步任務(wù)處理,串行、并行的處理隊(duì)列,非系統(tǒng)調(diào)用的信號(hào)量機(jī)制,定時(shí)任務(wù)處理,進(jìn)程、文件或網(wǎng)絡(luò)的
任務(wù)等優(yōu)點(diǎn)易用:
比之thread更簡單易用?;赽lock的特性導(dǎo)致它能極為簡單得在不同代碼作用域之間傳
下文
效率:實(shí)用且快速性能:算效率安全:無需加鎖或其他同步機(jī)制·
D
i
s
p
a
t
c
hQ
u
e
u
e·
D
i
s
p
a
t
c
hQueue
是
執(zhí)行處理的等待隊(duì)列。通過dispatch_async等函數(shù),按照先進(jìn)先出(FIFO)順序追加到Queue中處理·執(zhí)行處理時(shí),存在兩種Dispatch
Queue:S
e
r
i
a
l
Dispa
t
c
h
Q
u
e
u
e
---等待現(xiàn)在正在執(zhí)行的任務(wù)處理結(jié)束(串行)C
o
n
c
u
r
r
e
n
t
Dispatch
Q
u
e
u
e
---不等待現(xiàn)在正在執(zhí)行的任務(wù)處理結(jié)束(并發(fā))·
S
e
r
i
a
lDispatch
Q
u
e
u
e串行隊(duì)列,一個(gè)線程同時(shí)執(zhí)行一個(gè)任務(wù),可以避免數(shù)據(jù)競爭的問題可以生成多個(gè)Serial
Dispatch
Queue,各個(gè)Serial
Dispatch
Queue將并行執(zhí)行·
C
o
n
c
u
r
r
e
n
t
Dispatch
Q
u
e
u
e·
并發(fā)隊(duì)列,多個(gè)線程同時(shí)執(zhí)行多個(gè)任務(wù),效率高,具體是多少個(gè)線程并發(fā)執(zhí)行,取決于CPU核數(shù)和CPU負(fù)荷·
M
a
i
nDispatc
h
Q
u
e
u
e
(
dispatch_get_main_queue
)主隊(duì)列,在主線
執(zhí)行的隊(duì)列。因?yàn)橹骶€程只有一個(gè),所以
Main
DispatchQueue自然就是Serial
Dispatch
Queue一切跟UI有關(guān)的操作必須放在主線
執(zhí)行,所以要追加到Main
Dispatch
Queue·
G
l
o
b
a
lDispatc
h
Queue(
d
i
spatch_get_global_queue
)·
全局隊(duì)列,所有應(yīng)用程序都能夠使用的C
o
n
c
u
r
r
e
n
t
Dispatch
Queue·獲取隊(duì)列運(yùn)行在主線 的main
queue3
個(gè)不同優(yōu)先級(jí)的
隊(duì)列(High,Default,Low)1個(gè)優(yōu)先級(jí)更低的
隊(duì)列(用于
I
/
O,
Background)dispatch_queue_t
queue;//主隊(duì)列queue
=
dispatch_get_main_queue();//全局隊(duì)列queue
=
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,
0);queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
0);queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW,
0);queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,
0);·創(chuàng)建隊(duì)列d
i
s
p
a
t
c
h
_
q
u
e
u
e
_
c
r
e
a
t
e·
d
i
s
p
a
t
c
h
_
q
u
e
u
e
_
c
r
e
a
t
e//創(chuàng)建Serial
Dispatch
Queuedispatch_queue_create("com.wxhl.serial1",NULL);dispatch_queue_create("com.wxhl.serial2",DISPATCH_QUEUE_SERIAL);//創(chuàng)建Concurrent
Dispatch
Queuedispatch_queue_create("com.wxhl.concurrent",DISPATCH_QUEUE_CONCURRENT);內(nèi)存管理手動(dòng)內(nèi)存管理:dispatch_retain、dispatch_release·
d
i
s
p
a
t
c
h函數(shù)名稱中含有『create』的API在不需要其生成的對(duì)象時(shí),必須通過d
i
spa
t
c
h_re
l
e
a
s
e函數(shù)進(jìn)行ARC:
iOS6
之后
兼容ARC,
不再需要用dispatch_retain或dispatch_release··
添加任務(wù)d
i
s
p
a
t
c
h
_
a
s
y
n
c
提交一個(gè)異步執(zhí)行的block塊到隊(duì)列里面并且直接返回,不用等待block被調(diào)用·
d
i
s
p
a
t
c
h
_
s
y
n
c
提交一個(gè)同步執(zhí)行的block塊到隊(duì)列里面并且等待,直到這個(gè)block執(zhí)行完成,與d
i
s
p
a
t
c
h
_
a
s
y
n
c相反面執(zhí)行往主隊(duì)列里面添加·
使用d
i
spa
t
c
h_syn
c容易引起死鎖,慎重使用。比如在主線任務(wù)的操作就會(huì)引起死鎖/*
死鎖1
*/dispatch_queue_t
queue=
dispatch_get_main_queue();dispatch_sync(queue,
^{NSLog(@"sync1");});/*
死鎖2
*/dispatch_queue_t
queue=
dispatch_get_main_queue();dispatch_async(queue,
^{dispatch_sync(queue,
^{NSLog(@"sync2");});});·課堂練習(xí):·為UIImageView擴(kuò)展一個(gè)異步加載的方法,使用實(shí)現(xiàn)@interface
UIImageView
(WebCache)-(void)setImageWithURL:(NSURL
*)url;@end·延遲任務(wù)d
i
spatch_
a
f
t
e
rd
i
s
p
a
t
c
h
_
a
f
t
e
r等待指定的時(shí)間后異步的添加一個(gè)block塊到指定隊(duì)列里面,不堵塞當(dāng)前線程。d
i
s
p
a
t
c
h
_
a
f
t
e
r與NSDelayedPerforming區(qū)別?一次任務(wù)d
i
s
p
a
t
c
h
_
o
n
c
e保證d
i
s
p
a
t
c
h
_
o
n
c
e中的代碼塊在應(yīng)用程序里面只執(zhí)行一次,無論是不是多線程。所以可以用來實(shí)現(xiàn)單例模式,安全、簡潔、方便設(shè)置隊(duì)列優(yōu)先級(jí)
d
i
s
p
a
t
c
h
_
s
e
t
_
_
q
u
e
u
e改變queue的優(yōu)先級(jí)與目標(biāo)queue相同可以使多個(gè)serial
queue在目標(biāo)queue上一次只有一個(gè)執(zhí)行(串行執(zhí)行)DISPATCH_QUEUE_PRIORITY_HIGH
2DISPATCH_QUEUE_PRIORITY_DEFAULT
0DISPATCH_QUEUE_PRIORITY_LOW
(-2)DISPATCH_QUEUE_PRIORITY_BACKGROUND·掛起任務(wù)d
i
s
p
a
t
c
h
_
s
u
s
p
e
n
d掛起(暫停)隊(duì)列里面尚未開始執(zhí)行的任務(wù),對(duì)已經(jīng)正在執(zhí)行的任務(wù)沒有影響使queue的s
u
s
p
e
n
s
i
o
n
r
e
f
e
r
e
n
c
e
count加1恢復(fù)任務(wù)d
i
s
p
a
t
c
h
_
r
e
s
u
m
e恢復(fù)隊(duì)列里面之前被掛起的任務(wù),使這些任務(wù)能夠繼續(xù)執(zhí)行使queue的s
u
s
p
e
n
s
i
o
n
r
e
f
e
r
e
n
c
e
count減1·注意事項(xiàng):當(dāng)suspension
r
e
f
e
r
e
n
c
e
count大于0時(shí),queue就保持掛起狀態(tài)。因此,必須平衡使用suspend和resume如果掛起了一個(gè)queue或者source,那么在銷毀它之前,必須先對(duì)其進(jìn)行恢復(fù)無限互聯(lián)是國內(nèi)唯一一家專注于
和iPad開發(fā)培訓(xùn)機(jī)構(gòu),到目前為研發(fā)人才。隨著iOS7系統(tǒng)的發(fā)布,,手把
您寫代碼,從入止為各大公司輸送了一大批優(yōu)秀的iOS高級(jí)也在陸續(xù)發(fā)布國內(nèi)首套完整的iOS開發(fā)的門到熟練再到精通。高薪就業(yè)是檢驗(yàn)一家培訓(xùn)機(jī)構(gòu)質(zhì)量的唯一標(biāo)準(zhǔn),最好的肯定,也是
前進(jìn)的最
動(dòng)力,
感謝的學(xué)員高薪就業(yè)是對(duì)的努力,感謝對(duì)的支持!
也將免費(fèi)為
提供最好的就業(yè)后的技術(shù)支持!,
的高薪就業(yè)才是
最大的成功!高級(jí)用法··
組任務(wù)監(jiān)視一組block任務(wù)的完成,多個(gè)任務(wù)都結(jié)束后的一個(gè)匯總d
i
s
p
a
t
c
h
_
g
r
o
u
p
_
a
s
y
n
c處理,可以同步或異步地監(jiān)視d
i
spatch_group_notify
所有任務(wù)執(zhí)行結(jié)束匯總,不阻塞當(dāng)前線程d
i
spatch_group_wait
等待直到所有任務(wù)執(zhí)行結(jié)束,中途不能取消,阻塞當(dāng)前線程dispatch_queue_t
queue
=
dispatch_get_global_queue(0,
0);dispatch_group_t
group
=
dispatch_group_create();dispatch_group_async(group,queue,
^{NSLog(@"任務(wù)1");});dispatch_group_async(group,queue,^{NSLog(@"任務(wù)2");});//匯總結(jié)果//1、所有任務(wù)執(zhí)?結(jié)束匯總,不阻塞當(dāng)前線程dispatch_group_notify(group,dispatch_get_main_queue(),^{NSLog(@"所有任務(wù)執(zhí)?完成");});//2、
等待,直到所有任務(wù)執(zhí)?結(jié)束,中途不能取消,阻塞當(dāng)前線程long
result
=
dispatch_group_wait(group,
DISPATCH_TIME_FOREVER);高級(jí)用法·多元調(diào)用(迭代)·
d
i
s
p
a
t
c
h
_
a
p
p
l
y提交一個(gè)多元調(diào)用的block塊到隊(duì)列里面,并且等待block任務(wù)的所有迭代完成之后才返回·
d
i
s
p
a
t
c
h
_
a
p
p
l
y會(huì)阻塞當(dāng)前線程,在d
i
s
p
a
t
c
h
_
a
s
y
n
c中執(zhí)行d
i
spatch_apply函數(shù)·結(jié)合concurrent
queue,dispatch_apply能實(shí)現(xiàn)一個(gè)高性能的循環(huán)迭代NSArray
*arr
=
@[@6,
@12,
@3,
@24,
@51];
dispatch_queue_t
queue
=
dispatch_get_global_queue(0,
0);dispatch_async(queue,
^{//第?個(gè)參數(shù):次數(shù);第三個(gè)參數(shù):block塊??的形參是區(qū)分第?次dispatch_apply(arr.count,queue,^(size_t
index){NSLog(@"%zu
--
%@",
index,
arr[index]);});});高級(jí)用法·設(shè)立·
d
i
s
p
a
t
c
h
_
b
a
r
r
i
e
r
_
a
s
y
n
c直接返回提交一個(gè)異步執(zhí)行的帶的block塊到隊(duì)列里面并且·使用dispatch_barrier_async,需要指定通過dispatch_queue_create函數(shù)創(chuàng)建的一個(gè)c
o
n
c
u
r
r
e
n
t
q
u
e
u
e·在barrier任務(wù)之前的所有任務(wù)將并行執(zhí)行,任何在此之后提交的任務(wù)將不會(huì)執(zhí)行直到這個(gè)barrier任務(wù)執(zhí)行完成高級(jí)用法 -
信號(hào)量·信號(hào)量s
e
m
a
p
h
o
r
e·什么問題?如何解決?·猜運(yùn)行結(jié)果:dispatch_queue_t
queue
=
dispatch_get_global_queue(0,
0);NSMutableArray
*array
=
[[NSMutableArray
alloc]
init];for
(int
i
=
0;
i
<
100000;
i++)
{dispatch_async(queue,
^{[array
addObject:@(i)];});}高級(jí)用法 -
信號(hào)量·
d
i
s
p
a
t
c
h
_
s
e
m
a
p
h
o
r
e
_
t·
持有計(jì)數(shù)的信號(hào),使用計(jì)數(shù)來實(shí)現(xiàn)該信號(hào)功能。計(jì)數(shù)為0時(shí)等待,計(jì)數(shù)大于等于1時(shí),減去1而不等待創(chuàng)建新的計(jì)數(shù)信號(hào)信號(hào)量為0時(shí)等待,大于等于1時(shí),減1而不等待d
i
s
p
a
t
c
h
_
s
e
m
a
p
h
o
r
e
_
c
r
e
a
t
ed
i
s
p
a
t
c
h
_
s
e
m
a
p
h
o
r
e
_
w
a
i
td
i
s
p
a
t
c
h
_
s
e
m
a
p
h
o
r
e
_
s
i
g
n
a
l//創(chuàng)建?個(gè)初始計(jì)數(shù)值為1的信號(hào)發(fā)信號(hào),使信號(hào)加1dispatch_semaphore_t
semaphore
=
dispatch_semaphore_create(1);//信號(hào)量為0時(shí)等待,?于等于1時(shí),減1?不等待dispatch_semaphore_wait(semaphore,DISPATCH_TIME_FOREVER);//發(fā)信號(hào),使原來的信號(hào)計(jì)數(shù)值+1dispatch_semaphore_signal(semaphore);高級(jí)用法·課堂練習(xí):·用信號(hào)量實(shí)現(xiàn)控制多線程任務(wù)的最大并發(fā)數(shù)底層使用 -
了解·D
i
s
p
a
t
c
h源(
Dispatch
Source
)·
d
i
s
p
a
t
c
h
_
s
o
u
r
c
e
_
t
是一個(gè)監(jiān)視某些類型事件的對(duì)象,很底層,能用戶事件,比如進(jìn)程、文件、信號(hào)等,當(dāng)這些事件發(fā)生時(shí),dispatch
source異步地將一個(gè)block放入一個(gè)dispatch
queue里來執(zhí)行?!?/p>
對(duì)于iOS開發(fā)來說基本用不到,因?yàn)樵趇OS平臺(tái)有諸多限制,你無法啟動(dòng)進(jìn)程(因此就沒有必要監(jiān)視進(jìn)程),也不能在你的app之外寫數(shù)據(jù)(因此也就沒
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 彩鋼房屋維修工程承包合同7篇
- 2025年沈陽航空職業(yè)技術(shù)學(xué)院高職單招語文2018-2024歷年參考題庫頻考點(diǎn)含答案解析
- 2025年江西外語外貿(mào)職業(yè)學(xué)院高職單招語文2018-2024歷年參考題庫頻考點(diǎn)含答案解析
- 生產(chǎn)設(shè)備采購合同
- 簡單產(chǎn)品購銷的合同范本
- 清潔生產(chǎn)技術(shù)服務(wù)合同書模板
- 考核目標(biāo)的挑戰(zhàn)性與可衡量性
- 抵押和借款合同
- 住房裝修合同范本
- 酒店單位合同協(xié)議書
- 充電樁知識(shí)培訓(xùn)課件
- 2025年七年級(jí)下冊道德與法治主要知識(shí)點(diǎn)
- 2025年交通運(yùn)輸部長江口航道管理局招聘4人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 老年髖部骨折患者圍術(shù)期下肢深靜脈血栓基礎(chǔ)預(yù)防專家共識(shí)(2024版)解讀
- 偏癱足內(nèi)翻的治療
- 藥企質(zhì)量主管競聘
- 信息對(duì)抗與認(rèn)知戰(zhàn)研究-洞察分析
- 手術(shù)室??谱o(hù)士工作總結(jié)匯報(bào)
- 2025屆高三聽力技巧指導(dǎo)-預(yù)讀、預(yù)測
- 四年級(jí)下冊部編版語文教學(xué)參考教師用書
- 月球基地建設(shè)與運(yùn)行管理模式
評(píng)論
0/150
提交評(píng)論