hz83與班級(jí)同步ui高級(jí)_第1頁
hz83與班級(jí)同步ui高級(jí)_第2頁
hz83與班級(jí)同步ui高級(jí)_第3頁
hz83與班級(jí)同步ui高級(jí)_第4頁
hz83與班級(jí)同步ui高級(jí)_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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

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

并發(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

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

_

持有計(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論