標籤:
1.就基本使用
NSInvocationOperation
//1.建立操作對象,封裝需要執行的任務 NSInvocationOperation * operation =[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download) object:nil]; //2.執行操作(預設情況下,如果操作沒有放到隊列queue中,都是同步執行) [operation start];- (void)download{ NSLog(@"--------下載圖片-----%@",[NSThread currentThread]);}
NSBlockOperation
//1.封裝操作 NSBlockOperation * operation=[NSBlockOperation blockOperationWithBlock:^{ NSLog(@"--------下載圖片-----%@",[NSThread currentThread]); }]; [operation addExecutionBlock:^{ NSLog(@"--------下載圖片1-----%@",[NSThread currentThread]); }]; [operation addExecutionBlock:^{ NSLog(@"--------下載圖片2-----%@",[NSThread currentThread]); }]; //2.執行操作 [operation start]; //注意:只要NSBlockOperation封裝的運算元>1,就會非同步執行操作
NSOperationQueue 操作隊列
//建立操作隊列 NSOperationQueue * queue =[[NSOperationQueue alloc]init]; NSInvocationOperation *operation1 =[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download) object:nil]; NSInvocationOperation * operation2 =[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(run) object:nil]; NSBlockOperation * operation3 =[NSBlockOperation blockOperationWithBlock:^{ NSLog(@"--------下載圖片2-----%@",[NSThread currentThread]); }]; [operation3 addExecutionBlock:^{ NSLog(@"--------run2-----%@",[NSThread currentThread]); }]; [queue addOperation:operation1]; [queue addOperation:operation2]; [queue addOperation:operation3]; //將操作放在隊列裡才能非同步作業
*設定最大並發數
- (void)setMaxConcurrentOperationCount:(NSInteger )cnt;
*設定依賴
[opetationB addDependency:operationA];//操作B依賴於操作A A執行完才會執行B
iOS 多線程(NSOperationQueue)