iOS--多線程毅糟、GCD红选、NSOperation、

一姆另、基本概念

線程是用來(lái)執(zhí)行任務(wù)的喇肋,線程徹底執(zhí)行完任務(wù)A才能執(zhí)行任務(wù)B坟乾,為了同時(shí)執(zhí)行兩個(gè)任務(wù),產(chǎn)生了多線程

1蝶防、進(jìn)程

1)進(jìn)程是應(yīng)用程序的執(zhí)行實(shí)例甚侣,簡(jiǎn)單來(lái)說(shuō)就是在操作系統(tǒng)中運(yùn)行的程序,我在手機(jī)中只打開(kāi)QQ和微信兩個(gè)軟件间学,系統(tǒng)中就會(huì)有兩個(gè)進(jìn)程存在

2)進(jìn)程不能執(zhí)行任務(wù)

3)進(jìn)程在運(yùn)行時(shí)創(chuàng)建的資源隨著進(jìn)程的終止而死亡

2殷费、線程

1)進(jìn)程本身是不能執(zhí)行任務(wù)的,進(jìn)程想要執(zhí)行任務(wù)必須得有線程低葫,線程是進(jìn)程內(nèi)部獨(dú)立的執(zhí)行單元详羡,同時(shí)只能執(zhí)行一個(gè)任務(wù),相當(dāng)于一個(gè)子程序嘿悬。線程被分為兩種实柠,主線程和子線程

2)線程執(zhí)行完畢就會(huì)被銷(xiāo)毀

3)主線程:當(dāng)應(yīng)用程序啟動(dòng)時(shí)自動(dòng)創(chuàng)建和啟動(dòng),通常用來(lái)處理用戶(hù)的輸入并響應(yīng)各種事件和消息善涨。主線程的終止也意味著程序的結(jié)束

進(jìn)程一啟動(dòng)就會(huì)自動(dòng)自動(dòng)創(chuàng)建

顯示和刷新UI界面

處理UI事件

4)子線程:由主線程來(lái)創(chuàng)建窒盐,用來(lái)幫助主線程執(zhí)行程序的后臺(tái)處理任務(wù),如果子線程A中又創(chuàng)建一個(gè)子線程B钢拧,在創(chuàng)建之后登钥,這兩者就是相互獨(dú)立的,多個(gè)子線程在效果上可以同時(shí)執(zhí)行娶靡。

處理耗時(shí)的操作

子線程不能用來(lái)刷新UI

3牧牢、多線程

1)目前大多數(shù)的app,都需要連接服務(wù)器,而訪問(wèn)服務(wù)器的速度可能快也可能慢姿锭,如果一個(gè)app訪問(wèn)服務(wù)器的操作沒(méi)有在子線程操作的話(huà)塔鳍,在該app訪問(wèn)服務(wù)器的過(guò)程中,該軟件是不能相應(yīng)用戶(hù)的操作的呻此,只有該app訪問(wèn)結(jié)束以后轮纫,app才能相應(yīng)用戶(hù)的操作,這就造成了線程阻塞焚鲜,也就是我們常說(shuō)的卡頓線程

2)一條線程在同一時(shí)間內(nèi)只能執(zhí)行一個(gè)任務(wù)掌唾,但是進(jìn)程可以有多條線程,可以開(kāi)啟多條線程來(lái)執(zhí)行不同的任務(wù)忿磅,從而提高程序的執(zhí)行效率糯彬,避免線程阻塞

3)操作系統(tǒng)會(huì)根據(jù)線程的優(yōu)先級(jí)來(lái)安排CPU的時(shí)間,優(yōu)先級(jí)高的線程葱她,優(yōu)先調(diào)用的幾率會(huì)更大撩扒,同級(jí)的話(huà),看線程執(zhí)行的先后

4)同一時(shí)間內(nèi)吨些,CPU只能處理一條線程搓谆,只有一條線程在工作炒辉,多線程并行執(zhí)行,其實(shí)就是各個(gè)線程不斷切換泉手,因?yàn)榍袚Q的時(shí)間很快很快黔寇,就造成了同時(shí)執(zhí)行的假象,原理如下斩萌,比如A啡氢、B兩個(gè)線程

-? A執(zhí)行到某一時(shí)間段要切換了,可A任務(wù)沒(méi)有完成术裸,系統(tǒng)就會(huì)把A當(dāng)前執(zhí)行的位置和數(shù)據(jù)以入棧的方式保存起來(lái)

-? 然后B線程執(zhí)行,B執(zhí)行時(shí)間到了亭枷,他的位置狀態(tài)也會(huì)被系統(tǒng)保存到B的棧中

- 系統(tǒng)自動(dòng)找到A的棧袭艺,將A之前保存的數(shù)據(jù)恢復(fù),又可以從A之前斷開(kāi)的狀態(tài)繼續(xù)執(zhí)行下去叨粘,如此循環(huán)

5)系統(tǒng)每開(kāi)一個(gè)線程都有比較大的開(kāi)銷(xiāo)猾编,若線程開(kāi)的過(guò)多,不僅會(huì)占用大量的內(nèi)存和讓程序更加復(fù)雜升敲,而且會(huì)加重CPU的負(fù)擔(dān)答倡,這樣會(huì)使你的手機(jī)更容易發(fā)熱

6)多線程之間能夠?qū)崿F(xiàn)數(shù)據(jù)的共享

二、線程與進(jìn)程的關(guān)系

1驴党、線程是CPU執(zhí)行任務(wù)的基本單位瘪撇,一個(gè)進(jìn)程可以有多個(gè)線程,但同時(shí)只能執(zhí)行一個(gè)任務(wù)

2港庄、進(jìn)程就是運(yùn)行中的軟件倔既,是動(dòng)態(tài)的

3、一個(gè)操作系統(tǒng)可以對(duì)應(yīng)多個(gè)進(jìn)程鹏氧,一個(gè)進(jìn)程可以有多條線程渤涌,但至少有一個(gè)線程

4、同一個(gè)進(jìn)程內(nèi)的線程共享進(jìn)程里的資源

三把还、多線程的作用

1实蓬、提高程序執(zhí)行效率,避免線程阻塞造成的卡頓現(xiàn)象

2吊履、能適當(dāng)提高資源利用率(CPU安皱、內(nèi)存)

總結(jié):

1、進(jìn)程就是一個(gè)執(zhí)行中的應(yīng)用程序

2艇炎、線程在進(jìn)程里练俐,幫助進(jìn)程執(zhí)行任務(wù)

3、系統(tǒng)中可以有多個(gè)進(jìn)程冕臭,進(jìn)程里面可以有多個(gè)線程腺晾,必須有有一個(gè)主線程

4燕锥、子線程: 耗時(shí)的操作,網(wǎng)絡(luò)請(qǐng)求相關(guān)的

5悯蝉、主線程: 更新UI的

四归形、三種多線程編程技術(shù)

1、NSThread

NSThread是輕量級(jí)的多線程開(kāi)發(fā)鼻由,使用并不復(fù)雜暇榴,但使用NSThread需要自己管理線程的生命周期

2、NSOperation

1)使用NSOperation和NSOperationQueue進(jìn)行多線程開(kāi)發(fā)類(lèi)似于線程池蕉世,只要將一個(gè)NSOperation放到NSOperationQueue這個(gè)隊(duì)列中線程就會(huì)以此啟動(dòng)蔼紧。

2)NSOperationQueue負(fù)責(zé)管理、執(zhí)行所有的NSOperation,在這個(gè)過(guò)程中可以更加容易管理線程總數(shù)和控制線程之間的依賴(lài)關(guān)系

3)NSOperation有兩常用子類(lèi)用于創(chuàng)建線程操作:NSInvocationOperation和NSBlockOperation狠轻,兩種方式本質(zhì)沒(méi)有區(qū)別奸例,但后者使用block形式進(jìn)行代碼組織,使用相對(duì)方便向楼。

3查吊、GCD

1)CGD是基于C語(yǔ)言開(kāi)發(fā)的一套多線程開(kāi)發(fā)機(jī)制,也是目前蘋(píng)果官方推薦的多線程開(kāi)發(fā)方法

2)GCD會(huì)自動(dòng)管理線程的生命周期(創(chuàng)建線程湖蜕、調(diào)度任務(wù)逻卖、銷(xiāo)毀線程),程序員只需要告訴GCD想要執(zhí)行什么任務(wù)昭抒,不需要編寫(xiě)任何代碼管理線程

3)GCD是這三種多線程開(kāi)發(fā)方式中抽象層次最高的评也,使用起來(lái)也是最為方便的,只是基于C語(yǔ)言開(kāi)發(fā)灭返,并不像前兩種是面向?qū)ο箝_(kāi)發(fā)仇参,而是完全面向過(guò)程的

4)優(yōu)點(diǎn),他對(duì)于多核運(yùn)算更加有效婆殿,會(huì)自動(dòng)利用更多的CPU內(nèi)核

5)GCD中也有類(lèi)似于NSOperationQueue的隊(duì)列诈乒,GCD統(tǒng)一管理整個(gè)隊(duì)列中的任務(wù),GCD中的隊(duì)列分為并行隊(duì)列和串行隊(duì)列兩類(lèi)

串行隊(duì)列

只有一個(gè)線程婆芦,加入到隊(duì)列中的操作按添加順序執(zhí)行

并發(fā)隊(duì)列

有多個(gè)線程怕磨,操作進(jìn)來(lái)以后會(huì)將這些線程安排在可用的處理器上,同時(shí)保證先進(jìn)來(lái)的任務(wù)優(yōu)先處理

GCD中有個(gè)特殊的隊(duì)列就是主隊(duì)列消约,用來(lái)執(zhí)行主線程上的操作任務(wù)


/////////GCD///////

一肠鲫、基本概念

全稱(chēng)是Grand Central Dispatch,純C語(yǔ)言或粮,提供非常多強(qiáng)大的函數(shù)导饲,是目前蘋(píng)果官網(wǎng)推薦的多線程開(kāi)發(fā)方式,NSOperation便是基于GCD的封裝

二、GCD的優(yōu)勢(shì)所在

1渣锦、為多核的并行運(yùn)算提出了解決方案

2硝岗、GCD會(huì)自動(dòng)利用更多的CPU內(nèi)核,比如雙核袋毙、四核

3型檀、GCD會(huì)自動(dòng)管理線程的生命周期(創(chuàng)建線程、調(diào)度任務(wù)听盖、銷(xiāo)毀線程)

4胀溺、程序員只需要告訴GCD想要執(zhí)行什么任務(wù),不需要編寫(xiě)任何線程管理代碼

三皆看、GCD中有2個(gè)核心概念

1仓坞、隊(duì)列:用來(lái)存放任務(wù)

1)串行隊(duì)列

只有一個(gè)線程,加入到隊(duì)列中的操作按添加順序依次執(zhí)行腰吟,一個(gè)任務(wù)執(zhí)行完畢后无埃,才能再執(zhí)行下一個(gè)任務(wù)

2)并發(fā)隊(duì)列

有多個(gè)線程,操作進(jìn)來(lái)以后會(huì)將這些線程安排在可用的處理器上蝎困,同時(shí)保證先進(jìn)來(lái)的任務(wù)優(yōu)先處理

PS:GCD中還有一個(gè)特殊隊(duì)列就是主隊(duì)列,用來(lái)執(zhí)行主線程的操作任務(wù)

2倍啥、任務(wù):放在隊(duì)列中執(zhí)行

1)同步執(zhí)行

只能在當(dāng)前線程中執(zhí)行任務(wù)禾乘,不具備開(kāi)啟新線程的能力

2)異步執(zhí)行

可以在新的線程中執(zhí)行任務(wù),具備開(kāi)啟新線程的能力虽缕。

四始藕、GCD做多線程開(kāi)發(fā)可以抽象成兩步

1、找到隊(duì)列

1)找到更新UI的主線程所在的隊(duì)列

dispatch_queue_t mainQueue= dispatch_get_main_queue();

2) 創(chuàng)建隊(duì)列

dispatch_queue_t serialQueue = dispatch_queue_create("mySerialQueue", DISPATCH_QUEUE_SERIAL);

第一個(gè)參數(shù):隊(duì)列名字

第二個(gè)參數(shù):隊(duì)列類(lèi)類(lèi)型

并行隊(duì)列:DISPATCH_QUEUE_CONCURRENT

串行隊(duì)列:DISPATCH_QUEUE_SERIAL

3)系統(tǒng)內(nèi)部給我們提供有一個(gè)現(xiàn)成的并發(fā)全局隊(duì)列

dispatch_queue_t queue = dispatch_get_global_queue(0 , 0);

第一個(gè)參數(shù):線程的優(yōu)先級(jí), DISPATCH_QUEUE_PRIORITY_BACKGROUND是最低的氮趋。

第二個(gè)參數(shù):系統(tǒng)保留的參數(shù)伍派,永遠(yuǎn)傳0

2、在隊(duì)列中確定想做的事

1) 使用同步的方式

dispatch_sync(queue, ^{

});

2)使用異步的方式

dispatch_async(queue, ^{

});

五剩胁、GCD創(chuàng)建的線程任務(wù)有四種執(zhí)行方式

1诉植、串行隊(duì)列同步執(zhí)行任務(wù)

dispatch_queue_t serialQueue = dispatch_queue_create("serialQueue", DISPATCH_QUEUE_SERIAL);

dispatch_sync(serialQueue, ^{

NSLog(@"-%@",[NSThread currentThread]);

});

dispatch_sync(serialQueue, ^{

NSLog(@"1 - %@", [NSThread currentThread]);

});

dispatch_sync(serialQueue, ^{

NSLog(@"2 - %@", [NSThread currentThread]);

});

dispatch_sync(serialQueue, ^{

NSLog(@"3 - %@", [NSThread currentThread]);

});

同步不具有開(kāi)辟新線程的能力,不會(huì)開(kāi)辟新的線程去執(zhí)行任務(wù)昵观,會(huì)在當(dāng)前線程中順序執(zhí)行任務(wù)晾腔。

2、串行隊(duì)列異步執(zhí)行任務(wù)

dispatch_queue_t serialQueue1 = dispatch_queue_create("serialQueue1", DISPATCH_QUEUE_SERIAL);

dispatch_async(serialQueue1, ^{

NSLog(@"1 = %@",[NSThread currentThread]);

});

dispatch_async(serialQueue1, ^{

NSLog(@"2 = %@",[NSThread currentThread]);

});

dispatch_async(serialQueue1, ^{

NSLog(@"3 = %@",[NSThread currentThread]);

});

異步具有創(chuàng)建新線程的能力啊犬,會(huì)開(kāi)辟新的線程去執(zhí)行任務(wù)灼擂,但由于是串行,里面只能創(chuàng)建一個(gè)線程觉至,所以還是會(huì)按順序執(zhí)行

3剔应、并行隊(duì)列同步執(zhí)行任務(wù)

dispatch_queue_t concurrentQueue = dispatch_queue_create("concurrentQueue", DISPATCH_QUEUE_CONCURRENT);

dispatch_sync(concurrentQueue, ^{

NSLog(@"1 = %@",[NSThread currentThread]);

});

dispatch_sync(concurrentQueue, ^{

NSLog(@"2 = %@",[NSThread currentThread]);

});

dispatch_sync(concurrentQueue, ^{

NSLog(@"3 = %@",[NSThread currentThread]);

});

同步不具有創(chuàng)建新線程的能力,不會(huì)開(kāi)辟新的線程去執(zhí)行任務(wù),會(huì)在當(dāng)前線程去執(zhí)行任務(wù)

4峻贮、并發(fā)隊(duì)列異步執(zhí)行任務(wù)(常用)

dispatch_queue_t concurrentQueue1 = dispatch_queue_create("concurrentQueue", DISPATCH_QUEUE_CONCURRENT);

dispatch_async(concurrentQueue1, ^{

NSLog(@"1 = %@",[NSThread currentThread]);

});

dispatch_async(concurrentQueue1, ^{

NSLog(@"2 = %@",[NSThread currentThread]);

});

dispatch_async(concurrentQueue1, ^{

NSLog(@"3 = %@",[NSThread currentThread]);

});

并行隊(duì)列可以里可以有多個(gè)線程席怪,同步執(zhí)行的方式又可以開(kāi)辟多個(gè)線程,所以這里實(shí)現(xiàn)了多個(gè)線程并行執(zhí)行,沒(méi)有按照順序

六月洛、GCD組的應(yīng)用

GCD中可以將一組相關(guān)聯(lián)的操作何恶,定義到一個(gè)群組中

定義到群組中之后,當(dāng)所有線程完成時(shí)嚼黔,可以獲得通知

0细层、創(chuàng)建全局隊(duì)列

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

1、定義群組

dispatch_group_t group = dispatch_group_create();

2唬涧、定義群組的異步任務(wù)

dispatch_group_async(group, queue, ^{

});

dispatch_group_async(group, queue, ^{

});

3疫赎、群組任務(wù)完成通知

dispatch_group_notify(group, queue, ^{

});

1)dispatch_group_notify可以監(jiān)聽(tīng)一組任務(wù)是否完成。這個(gè)方法很有用碎节,比如你執(zhí)行三個(gè)下載任務(wù)捧搞,當(dāng)三個(gè)任務(wù)都下載完成后,才通知界面說(shuō)已經(jīng)完成

2)如果不需要監(jiān)聽(tīng)一組任務(wù)狮荔,可以直接使用dispatch_async方法

六胎撇、線程鎖

1、在多線程應(yīng)用中殖氏,所有被搶奪資源的屬性需要設(shè)置為原子屬性,atomic屬性晚树,必須與@synchronized(同步鎖)一起使用 附加:如果將屬性設(shè)置為原子屬性,會(huì)十分消耗性能雅采,所以在多線程開(kāi)發(fā)中盡量避免資源搶奪問(wèn)題

2爵憎、系統(tǒng)會(huì)在多線程搶奪時(shí),保證該屬性有且僅有一個(gè)線程能夠訪問(wèn)

3婚瓜、操作步驟

1)將資源屬性設(shè)置原子屬性

2)將處理該屬性的代碼放到線程鎖中

@synchronized (self) {

}

////////////NSOperation//////////

一宝鼓、基本概念

1)使用NSOperation和NSOperationQueue進(jìn)行多線程開(kāi)發(fā)類(lèi)似于線程池,只要將一個(gè)NSOperation放到NSOperationQueue這個(gè)隊(duì)列中線程就會(huì)以此啟動(dòng)巴刻。

2)NSOperationQueue負(fù)責(zé)管理愚铡、執(zhí)行所有的NSOperation,在這個(gè)過(guò)程中可以更加容易管理線程總數(shù)和控制線程之間的依賴(lài)關(guān)系

二、NSOperation

1胡陪、利用他來(lái)創(chuàng)建線程操作茂附,線程操作只有放在線程隊(duì)列中才會(huì)在子線程中執(zhí)行

2、NSOperation有兩常用子類(lèi)用于創(chuàng)建線程操作:NSInvocationOperation和NSBlockOperation督弓,兩種方式本質(zhì)沒(méi)有區(qū)別营曼,但后者使用block形式進(jìn)行代碼組織,使用相對(duì)方便愚隧。

2蒂阱、設(shè)置線程依賴(lài)關(guān)系锻全,NSOperation之間可以設(shè)置依賴(lài)來(lái)保證執(zhí)行順序,A依賴(lài)于B代表著,B執(zhí)行完后录煤,才能執(zhí)行A

[A addDependency:B];

三鳄厌、NSOperationQueue

1、主隊(duì)列

凡是添加到主隊(duì)列中的任務(wù)(NSOpertaion),都會(huì)放到主線程中執(zhí)行

[NSOperationQueue mainQueue]

2妈踊、非主隊(duì)列

添加到這種隊(duì)列中的任務(wù)了嚎,都會(huì)放到子線程中執(zhí)行

[[NSOperationQueue alloc]init]

3、隊(duì)列的暫停

queue.suspended = YES;

1)只要設(shè)置隊(duì)列的suspended為YES, 那么就會(huì)暫停隊(duì)列中其它任務(wù)的執(zhí)行廊营,也就是說(shuō)不會(huì)再繼續(xù)執(zhí)行沒(méi)有執(zhí)行到得任務(wù)

2)設(shè)置為暫停之后, 不會(huì)立即暫停,會(huì)繼續(xù)執(zhí)行當(dāng)前正在執(zhí)行的任務(wù),直到當(dāng)前任務(wù)執(zhí)行完畢,就不會(huì)執(zhí)行下一個(gè)任務(wù)了,也就是說(shuō), 暫停其實(shí)是暫停下一個(gè)任務(wù),而不能暫停當(dāng)前任務(wù)

3)暫停是可以恢復(fù)的,只要設(shè)置隊(duì)列的suspended為NO,那么就會(huì)恢復(fù)隊(duì)列中其它任務(wù)的執(zhí)行

4歪泳、取消隊(duì)列中所有任務(wù)的執(zhí)行

[queue cancelAllOperations]

取消和暫停一樣, 是取消后面的任務(wù), 不能取消當(dāng)前正在執(zhí)行的任務(wù),取消是不可以恢復(fù)的

5露筒、管理線程的最大并發(fā)數(shù)呐伞,也就是同時(shí)執(zhí)行的任務(wù)數(shù)。

queue.maxConcurrentOperationCount = 1;

默認(rèn)是-1慎式,不能設(shè)為0伶氢,如果設(shè)置為0就不執(zhí)行任務(wù)。

四瘪吏、創(chuàng)建線程操作一共有兩種方式

1癣防、NSInvocationOperation或NSBlockOperation與NSOperationQueue搭配

1)創(chuàng)建一個(gè)線程操作

NSInvocationOperation *invocationOperation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(invocationOperation:) object:nil];

2) 創(chuàng)建一個(gè)線程隊(duì)列

NSOperationQueue *operationQueue = [NSOperationQueue new];

3) 將創(chuàng)建好的線程操作放在線程隊(duì)列中,只有放在線程隊(duì)列中的線程操作才會(huì)在子線程中執(zhí)行。線程隊(duì)列負(fù)責(zé)管理掌眠、執(zhí)行所有的NSOperation

[operationQueue addOperation:invocationOperation];

4) 在創(chuàng)建線程操作時(shí)選擇的方法內(nèi)更新UI

- (void)invocationOperation:(NSString *)url{

//在子線程中回到主線程更新UI

[[NSOperationQueue mainQueue] addOperationWithBlock:^{

imageView.image = [UIImage imageWithData:data];

}];

}

2蕾盯、繼承于NSOperation的子類(lèi)與NSOperationQueue的搭配

創(chuàng)建一個(gè)繼承于NSOperation的類(lèi),并在.m文件中重寫(xiě)main方法扇救,main方法便是該線程要執(zhí)行的操作刑枝。注意香嗓,如果是同步操作迅腔,該方法能夠自動(dòng)訪問(wèn)到主線程的自動(dòng)釋放池,如果是異步執(zhí)行操作靠娱,那么將無(wú)法訪問(wèn)到主線程的自動(dòng)釋放池沧烈,需要再main中再新建一個(gè)自動(dòng)釋放池,來(lái)幫助管理內(nèi)存像云。

/////////////NSThread////////////

一锌雀、基本介紹

NSThread是輕量級(jí)的多線程開(kāi)發(fā),使用并不復(fù)雜迅诬,但使用NSThread需要自己管理線程的生命周期

二腋逆、NSThread常用方法

1、使用NSThread開(kāi)辟線程的兩種方式

1)創(chuàng)建并手動(dòng)開(kāi)啟線程

NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(thread:) object:nil];

[thread start];

2) 創(chuàng)建并自動(dòng)開(kāi)啟線程

[NSThread detachNewThreadSelector:@selector(compete) toTarget:self withObject:nil];

2侈贷、NSThread的常用方法

1)判斷當(dāng)前進(jìn)程是否是多線程

BOOL isMultiThread = [NSThread isMultiThreaded];

2)獲取當(dāng)前線程對(duì)象

NSLog(@"當(dāng)前所在的線程=%@",[NSThread currentThread]);

umber = 1 : 線程的編號(hào)惩歉,由系統(tǒng)設(shè)置,主線程的編號(hào)為1

name = main:指當(dāng)前所在的線程的名字叫做main,可以自己設(shè)置,主線程的名字默認(rèn)是main撑蚌,其他線程如果不給他設(shè)置名字默認(rèn)是nil

3) 使當(dāng)前線程睡眠指定的時(shí)間上遥,單位為秒,

//這句代碼在哪個(gè)線程執(zhí)行就讓哪個(gè)線程睡眠争涌。

[NSThread sleepForTimeInterval:2];

4)判斷當(dāng)前線程是否為主線程

[NSThread isMainThread];

5)設(shè)置線程名字

[thread setName:@"線程名字"];

6)NSThread對(duì)象可知的三種狀態(tài)

isExecuting:是否正在執(zhí)行粉楚,只讀

isFinished:是否已經(jīng)完成,只讀

isCancellled:是否已經(jīng)取消亮垫,可通過(guò)[thread cancel]手動(dòng)設(shè)置模软,線程取消意味著該線程處于準(zhǔn)備退出狀態(tài),但不會(huì)影響線程的運(yùn)行包警。

7)退出當(dāng)前線程

[NSThread exit];

三撵摆、NSObject中關(guān)于多線程的方法

1、在后臺(tái)執(zhí)行一個(gè)操作害晦,本質(zhì)就是重新創(chuàng)建一個(gè)線程執(zhí)行當(dāng)前方法特铝。

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg:

2、在指定的線程上執(zhí)行一個(gè)方法壹瘟,需要用戶(hù)創(chuàng)建一個(gè)線程對(duì)象鲫剿。

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait:

3、在主線程上執(zhí)行一個(gè)方法(前面已經(jīng)使用過(guò))

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait:

練習(xí): 多線程加載多張網(wǎng)絡(luò)圖片

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末稻轨,一起剝皮案震驚了整個(gè)濱河市灵莲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌殴俱,老刑警劉巖政冻,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異线欲,居然都是意外死亡明场,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)李丰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)苦锨,“玉大人,你說(shuō)我怎么就攤上這事趴泌≈凼妫” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵嗜憔,是天一觀的道長(zhǎng)秃励。 經(jīng)常有香客問(wèn)我,道長(zhǎng)吉捶,這世上最難降的妖魔是什么夺鲜? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任廓鞠,我火速辦了婚禮,結(jié)果婚禮上谣旁,老公的妹妹穿的比我還像新娘床佳。我一直安慰自己,他們只是感情好榄审,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布砌们。 她就那樣靜靜地躺著,像睡著了一般搁进。 火紅的嫁衣襯著肌膚如雪浪感。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天饼问,我揣著相機(jī)與錄音影兽,去河邊找鬼。 笑死莱革,一個(gè)胖子當(dāng)著我的面吹牛峻堰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盅视,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼捐名,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了闹击?” 一聲冷哼從身側(cè)響起镶蹋,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赏半,沒(méi)想到半個(gè)月后贺归,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡断箫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年拂酣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瑰枫。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡踱葛,死狀恐怖丹莲,靈堂內(nèi)的尸體忽然破棺而出光坝,到底是詐尸還是另有隱情,我是刑警寧澤甥材,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布盯另,位于F島的核電站,受9級(jí)特大地震影響洲赵,放射性物質(zhì)發(fā)生泄漏鸳惯。R本人自食惡果不足惜商蕴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芝发。 院中可真熱鬧绪商,春花似錦、人聲如沸辅鲸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)独悴。三九已至例书,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間刻炒,已是汗流浹背决采。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坟奥,地道東北人树瞭。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像爱谁,于是被迫代替她去往敵國(guó)和親移迫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容