![hz83與班級同步ui高級_第1頁](http://file4.renrendoc.com/view/b609c08046efe13b85cc8c965243861f/b609c08046efe13b85cc8c965243861f1.gif)
![hz83與班級同步ui高級_第2頁](http://file4.renrendoc.com/view/b609c08046efe13b85cc8c965243861f/b609c08046efe13b85cc8c965243861f2.gif)
![hz83與班級同步ui高級_第3頁](http://file4.renrendoc.com/view/b609c08046efe13b85cc8c965243861f/b609c08046efe13b85cc8c965243861f3.gif)
![hz83與班級同步ui高級_第4頁](http://file4.renrendoc.com/view/b609c08046efe13b85cc8c965243861f/b609c08046efe13b85cc8c965243861f4.gif)
![hz83與班級同步ui高級_第5頁](http://file4.renrendoc.com/view/b609c08046efe13b85cc8c965243861f/b609c08046efe13b85cc8c965243861f5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(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高級也在陸續(xù)發(fā)布國內(nèi)首套完整的iOS開發(fā)的門到熟練再到精通。高薪就業(yè)是檢驗(yàn)一家培訓(xùn)機(jī)構(gòu)質(zhì)量的唯一標(biāo)準(zhǔn),最好的肯定,也是
前進(jìn)的最
動力,
感謝的學(xué)員高薪就業(yè)是對的努力,感謝對的支持!
也將免費(fèi)為
提供最好的就業(yè)后的技術(shù)支持!,
的高薪就業(yè)才是
最大的成功!G
r
a
n
d
Central
Dispatch主講:本節(jié)內(nèi)容隊(duì)列的概念······任務(wù)的追加、掛起、恢復(fù)隊(duì)列的優(yōu)先級控制一次任務(wù)、延時任務(wù)組任務(wù)任務(wù)信號量·實(shí)現(xiàn)功能輕量、優(yōu)雅,使得它在很多地方比之專門創(chuà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)用的信號量機(jī)制,定時任務(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í)行處理時,存在兩種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ì)列,一個線程同時執(zhí)行一個任務(wù),可以避免數(shù)據(jù)競爭的問題可以生成多個Serial
Dispatch
Queue,各個Serial
Dispatch
Queue將并行執(zhí)行·
C
o
n
c
u
r
r
e
n
t
Dispatch
Q
u
e
u
e·
并發(fā)隊(duì)列,多個線程同時執(zhí)行多個任務(wù),效率高,具體是多少個線程并發(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)橹骶€程只有一個,所以
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
個不同優(yōu)先級的
隊(duì)列(High,Default,Low)1個優(yōu)先級更低的
隊(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)存管理手動內(nèi)存管理:dispatch_retain、dispatch_release·
d
i
s
p
a
t
c
h函數(shù)名稱中含有『create』的API在不需要其生成的對象時,必須通過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
提交一個異步執(zhí)行的block塊到隊(duì)列里面并且直接返回,不用等待block被調(diào)用·
d
i
s
p
a
t
c
h
_
s
y
n
c
提交一個同步執(zhí)行的block塊到隊(duì)列里面并且等待,直到這個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ù)的操作就會引起死鎖/*
死鎖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ò)展一個異步加載的方法,使用實(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等待指定的時間后異步的添加一個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)先級
d
i
s
p
a
t
c
h
_
s
e
t
_
_
q
u
e
u
e改變queue的優(yōu)先級與目標(biāo)queue相同可以使多個serial
queue在目標(biāo)queue上一次只有一個執(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ù),對已經(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時,queue就保持掛起狀態(tài)。因此,必須平衡使用suspend和resume如果掛起了一個queue或者source,那么在銷毀它之前,必須先對其進(jìn)行恢復(fù)無限互聯(lián)是國內(nèi)唯一一家專注于
和iPad開發(fā)培訓(xùn)機(jī)構(gòu),到目前為研發(fā)人才。隨著iOS7系統(tǒng)的發(fā)布,,手把
您寫代碼,從入止為各大公司輸送了一大批優(yōu)秀的iOS高級也在陸續(xù)發(fā)布國內(nèi)首套完整的iOS開發(fā)的門到熟練再到精通。高薪就業(yè)是檢驗(yàn)一家培訓(xùn)機(jī)構(gòu)質(zhì)量的唯一標(biāo)準(zhǔn),最好的肯定,也是
前進(jìn)的最
動力,
感謝的學(xué)員高薪就業(yè)是對的努力,感謝對的支持!
也將免費(fèi)為
提供最好的就業(yè)后的技術(shù)支持!,
的高薪就業(yè)才是
最大的成功!高級用法··
組任務(wù)監(jiān)視一組block任務(wù)的完成,多個任務(wù)都結(jié)束后的一個匯總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);高級用法·多元調(diào)用(迭代)·
d
i
s
p
a
t
c
h
_
a
p
p
l
y提交一個多元調(diào)用的block塊到隊(duì)列里面,并且等待block任務(wù)的所有迭代完成之后才返回·
d
i
s
p
a
t
c
h
_
a
p
p
l
y會阻塞當(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)一個高性能的循環(huán)迭代NSArray
*arr
=
@[@6,
@12,
@3,
@24,
@51];
dispatch_queue_t
queue
=
dispatch_get_global_queue(0,
0);dispatch_async(queue,
^{//第?個參數(shù):次數(shù);第三個參數(shù):block塊??的形參是區(qū)分第?次dispatch_apply(arr.count,queue,^(size_t
index){NSLog(@"%zu
--
%@",
index,
arr[index]);});});高級用法·設(shè)立·
d
i
s
p
a
t
c
h
_
b
a
r
r
i
e
r
_
a
s
y
n
c直接返回提交一個異步執(zhí)行的帶的block塊到隊(duì)列里面并且·使用dispatch_barrier_async,需要指定通過dispatch_queue_create函數(shù)創(chuàng)建的一個c
o
n
c
u
r
r
e
n
t
q
u
e
u
e·在barrier任務(wù)之前的所有任務(wù)將并行執(zhí)行,任何在此之后提交的任務(wù)將不會執(zhí)行直到這個barrier任務(wù)執(zhí)行完成高級用法 -
信號量·信號量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)];});}高級用法 -
信號量·
d
i
s
p
a
t
c
h
_
s
e
m
a
p
h
o
r
e
_
t·
持有計(jì)數(shù)的信號,使用計(jì)數(shù)來實(shí)現(xiàn)該信號功能。計(jì)數(shù)為0時等待,計(jì)數(shù)大于等于1時,減去1而不等待創(chuàng)建新的計(jì)數(shù)信號信號量為0時等待,大于等于1時,減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)建?個初始計(jì)數(shù)值為1的信號發(fā)信號,使信號加1dispatch_semaphore_t
semaphore
=
dispatch_semaphore_create(1);//信號量為0時等待,?于等于1時,減1?不等待dispatch_semaphore_wait(semaphore,DISPATCH_TIME_FOREVER);//發(fā)信號,使原來的信號計(jì)數(shù)值+1dispatch_semaphore_signal(semaphore);高級用法·課堂練習(xí):·用信號量實(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
是一個監(jiān)視某些類型事件的對象,很底層,能用戶事件,比如進(jìn)程、文件、信號等,當(dāng)這些事件發(fā)生時,dispatch
source異步地將一個block放入一個dispatch
queue里來執(zhí)行?!?/p>
對于iOS開發(fā)來說基本用不到,因?yàn)樵趇OS平臺有諸多限制,你無法啟動進(jìn)程(因此就沒有必要監(jiān)視進(jìn)程),也不能在你的app之外寫數(shù)據(jù)(因此也就沒
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新能源儲能項(xiàng)目落戶保障合同
- 廚具設(shè)備購銷合同(31篇)
- 教學(xué)工作總結(jié)英語2024(32篇)
- 2023-2024學(xué)年浙江省寧波市鎮(zhèn)海中學(xué)高三下學(xué)期期中考試歷史試卷
- 2025年業(yè)務(wù)提升合作諒解協(xié)議
- 2025年供應(yīng)鏈管理公司合作項(xiàng)目協(xié)議書
- 2025年產(chǎn)品創(chuàng)新與生產(chǎn)協(xié)作協(xié)議
- 2025年農(nóng)村醫(yī)療人員定向就業(yè)協(xié)議
- 2025年大數(shù)據(jù)項(xiàng)目規(guī)劃申請報(bào)告模板
- 2025年遠(yuǎn)程醫(yī)療項(xiàng)目立項(xiàng)申請報(bào)告模板
- 2025年中國東方電氣集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 2024-2025學(xué)年云南省昆明市盤龍區(qū)三年級(上)期末數(shù)學(xué)試卷(含答案)
- 物業(yè)公司行政人事部職責(zé)
- 模具檢測知識培訓(xùn)
- 醫(yī)療健康行業(yè)保密免責(zé)協(xié)議書
- 2025年七年級下冊道德與法治主要知識點(diǎn)
- 第一課走進(jìn)人工智能 說課稿 2023-2024學(xué)年浙教版(2023)初中信息技術(shù)八年級下冊
- (正式版)HG∕T 21633-2024 玻璃鋼管和管件選用規(guī)定
- 人教版《道德與法治》二年級下冊全冊優(yōu)秀課件
- SMT車間溫濕度點(diǎn)檢記錄表
- 罩極電機(jī)檢驗(yàn)細(xì)則
評論
0/150
提交評論