目錄:
一 NSOperation簡介及優勢
二 實現多線程的關鍵步驟
三 NSOperation子類的使用
1 NSInvocationOperation
2 NSBlockOperation
3 自定義子類繼承NSOperation,實現內部相應的?法 重寫main方法
一 NSOperation簡介及優勢
在GCD 的基礎上進行的封裝,不用考慮內存, 系統解決 開幾個線程 ,使用起來非常方便。
二 實現多線程的關鍵步驟
把主線程不想干的事情放到 NSOperation 中
把NSOperation對象 放到NSOperationQueue中
三 NSOperation子類的使用
NSOperation是個抽象類,并不具備封裝操作的能力,必須使?它的子類
1 NSInvocationOperation
// 1 分線程需要做的任務
NSInvocationOperation *operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(downloadImage) object:nil];
// 2 將 operation加到 NSOperationQueue
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
[queue addOperation:operation];
2 NSBlockOperation
```
創建并啟動一個分線程
/**
*開啟分線程的第一種方式
*/
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"下載圖片%@",[NSThread currentThread]);
}];
/**
*
*開啟分線程的第二種方式 operation對象調用 addExecutionBlock 開啟分線程
*
*/
[operation addExecutionBlock:^{
NSLog(@"---下載音樂---%@",[NSThread currentThread]);
}];
/**
*
*開啟分線程的第三種方式 queue對象 直接addOperationWithBlock
*
*/
[queueu addOperationWithBlock:^{
NSLog(@"---下載小說---%@",[NSThread currentThread]);
}];
現在需要 讓queue 串行
// 添加依賴 防止互相依賴 造成死鎖 3》1 1》3
// 2 3 1
[operationImage addDependency:operationMovei];
[operationMovei addDependency:operationMusic];
// 取消所有的操作事務
[queue cancelAllOperations];
// 暫停 開始 性能優化 定期清理緩存 多線程編程 scrollview tablview
queue.suspended = YES;
queue.suspended = NO;
//盲聽 監聽
[operationMovei setCompletionBlock:^{
NSLog(@"圖片下完了%@",[NSThread currentThread]);
}];