1.線程依賴.
目前在 iOS 和 OS X 中有兩套先進(jìn)的同步 API 可供我們使用:NSOperation 和 GCD 嫡良。其中 GCD 是基于 C 的底層的 API 徙缴,而 NSOperation 則是 GCD 實(shí)現(xiàn)的 Objective-C API主之。 雖然 NSOperation 是基于 GCD 實(shí)現(xiàn)的,我們可以用NSOperation 輕易的實(shí)現(xiàn)一些 GCD 要寫大量代碼的事情齐鲤。
操作隊(duì)列(operation queue)是由 GCD 提供的一個(gè)隊(duì)列模型的 Cocoa 抽象瓦糟。GCD 提供了更加底層的控制,而操作隊(duì)列則在 GCD 之上實(shí)現(xiàn)了一些方便的功能修己,這些功能對(duì)于 app 的開發(fā)者來說通常是最好最安全的選擇恢总。
//NSOperationQueue 線程之前添加依賴操作
-(void)dependency{
/**
假設(shè)有A、B箩退、C三個(gè)操作离熏,要求:
1. 3個(gè)操作都異步執(zhí)行
2. 操作C依賴于操作B
3. 操作B依賴于操作A
*/
//創(chuàng)建一個(gè)隊(duì)列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
//可開辟線程的最大數(shù)量
queue.maxConcurrentOperationCount = 3;
//創(chuàng)建三個(gè)任務(wù)
NSBlockOperation *operationA = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"A任務(wù)當(dāng)前線程為:%@", [NSThread currentThread]);
}];
NSBlockOperation *operationB = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"B任務(wù)當(dāng)前線程為:%@", [NSThread currentThread]);
}];
NSBlockOperation *operationC = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"C任務(wù)當(dāng)前線程為:%@", [NSThread currentThread]);
}];
//設(shè)置三個(gè)任務(wù)相互依賴
// operationB 任務(wù)依賴于 operationA
[operationB addDependency:operationA];
// operationC 任務(wù)依賴于 operationB
[operationC addDependency:operationB];
//添加操作到隊(duì)列中(自動(dòng)異步執(zhí)行任務(wù),并發(fā))
[queue addOperation:operationA];
[queue addOperation:operationB];
[queue addOperation:operationC];
}
參考: