1.線程依賴.目前在 iOS 和 OS X 中有兩套先進的同步 API 可供我們使用:NSOperation 和 GCD 。其中 GCD 是基于 C 的底層的 API 蘸吓,而 NSOperation 則是 GCD 實現(xiàn)的 Objective-C API。 雖然 NSOperation 是基于 GCD 實現(xiàn)的洒琢,我們可以用NSOperation 輕易的實現(xiàn)一些 GCD 要寫大量代碼的事情尝哆。操作隊列(operation queue)是由 GCD 提供的一個隊列模型的 Cocoa 抽象仰禀。GCD 提供了更加底層的控制灵迫,而操作隊列則在 GCD 之上實現(xiàn)了一些方便的功能秦叛,這些功能對于 app 的開發(fā)者來說通常是最好最安全的選擇。
//NSOperationQueue 線程之前添加依賴操作
-(void)dependency{
/**
假設(shè)有A瀑粥、B挣跋、C三個操作,要求:
1. 3個操作都異步執(zhí)行
2. 操作C依賴于操作B
3. 操作B依賴于操作A
*/
//創(chuàng)建一個隊列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
//可開辟線程的最大數(shù)量
queue.maxConcurrentOperationCount = 3;
//創(chuàng)建三個任務(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è)置三個任務(wù)相互依賴
// operationB 任務(wù)依賴于 operationA
[operationB addDependency:operationA];
// operationC 任務(wù)依賴于 operationB
[operationC addDependency:operationB];
//添加操作到隊列中(自動異步執(zhí)行任務(wù)狞换,并發(fā))
[queue addOperation:operationA];
[queue addOperation:operationB];
[queue addOperation:operationC];
}