多線程的方法

多線程分為GCD,NSOperation和NSThread。GCD底層是用C語(yǔ)言實(shí)現(xiàn)的,NSOperation是對(duì)GCD輕量級(jí)的封裝。NSThread是比較原始的方法了。

1、GCD創(chuàng)建多線程

首先,我們需要?jiǎng)?chuàng)建一個(gè)隊(duì)列,隊(duì)列根據(jù)不同的需要?jiǎng)?chuàng)建為串行隊(duì)列和并行隊(duì)列

dispatch_queue_t ?q = dispatch_queue_create("xiancheng",DISPATCH_QUEUE_CONCURRENT)

函數(shù)中第一個(gè)參數(shù)是當(dāng)前隊(duì)列的名稱,第二個(gè)參數(shù)是創(chuàng)建隊(duì)列的類型:DISPATCH_QUEUE_CONCURRENT為并行隊(duì)列,DISPATCH_QUEUE_SERIAL為串行隊(duì)列。

另外,隊(duì)列還有主隊(duì)列和全局隊(duì)列。

主隊(duì)列:dispatch_queue_t ?queue = ?dispatch_get_main_queue();獲取主線程隊(duì)列,在主線程更新UI。

全局隊(duì)列:dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)

接下來(lái)我們可以使用dispatch_async或dispatch_sync函數(shù)來(lái)加載需要運(yùn)行的任務(wù)。

同步線程:

dispatch_sync(queue,^{

block的具體代碼(即需要執(zhí)行的任務(wù))

});

同步執(zhí)行任務(wù)代碼,不會(huì)返回函數(shù),知道block中的代碼執(zhí)行完畢。嵌套使用時(shí)容易引起死鎖。

異步線程:

dispatch_async(queue,^{

block中的任務(wù)代碼

});

異步執(zhí)行block,函數(shù)立即返回。

NSOperation:

同樣的,NSOperation需要一個(gè)隊(duì)列

在.m文件中,輸入以下內(nèi)容:

#import “ViewController.h”

@interface ViewController()

@property(noatomic,strong) NSOperationQueue *myQueue;

@end

@implementation ViewController

-(void)viewDidLoad{

[super viewDidLoad];

初始化隊(duì)列

self.myQueue = [[NSOperationQueue alloc] init];

}

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

[self.myQueue addOperationWithBlock:^{


Block中的任務(wù)代碼

}]

在主線程中執(zhí)行任務(wù)

[NSOperationQueue mainQueue] addOperationWithBlock:^{

block中的任務(wù)代碼

}];

多個(gè)線程時(shí),設(shè)置線程的執(zhí)行順序

NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{

任務(wù)代碼

}];

NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{

任務(wù)代碼

}];

NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{

任務(wù)代碼

}];

假設(shè)我們需要線程的執(zhí)行順序?yàn)椋簅p1,op2,op3.

思想就是線程2依賴于線程1,等線程1執(zhí)行完畢后執(zhí)行線程2.

[op2 addDependency:op1];

[op3 addDependency:op2];

將線程依次添加到隊(duì)列中

[self.myQueue addOperation:op1]

[self.myQueue addOperation:op2]

[self.myQueue addOperation:op3]

@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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