iOS-NSThread、NSOperation、GCDの違い
4356 ワード
1.iOSの3種類のマルチスレッド技術
以上の3つのプログラミング方式は上から下へ、抽象度階層は低から高へ、抽象度が高いほど使用が簡単で、Appleが最も推奨しているもので、プロジェクトでは多くのフレームワーク技術が異なるマルチスレッド技術を使用しています.
2.三種類のマルチスレッド技術の比較
3.三種類のマルチスレッド技術の実現
3.1 NSThreadのマルチスレッド技術
3.2 NSOperation、オブジェクト向けマルチスレッド技術
NSInvocationOperation *op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(opAction) object:nil];
// start,
// [op1 start];
// , 7
[_queue addOperation:op1];
インスタンス化操作NSBlockOperation
#pragma mark
- (IBAction)operationDemo3:(id)sender {
// 1.
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@" %@" , [NSThread currentThread]);
}];
// 2.
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@" %@" , [NSThread currentThread]);
}];
// 3.
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@" UI %@" , [NSThread currentThread]);
}];
// , “ ” , ,
//
// : , , 。
[op2 addDependency:op1];
[op3 addDependency:op2];
[op1 addDependency:op3];
[_queue addOperation:op1];
[_queue addOperation:op2];
[[NSOperationQueue mainQueue] addOperation:op3];
}
キューNSOperationQueueに操作を追加すると、マルチスレッド実行が開始されます.
[_queue addOperation:op1];
[_queue addOperation:op2];
UIの更新メインスレッドキューの使用
// [NSOpeationQueue mainQueue] addOperation ^{
};
[[NSOperationQueue mainQueue] addOperation:op3];
操作キューのsetMaxConcurrentOperationCount:同時スレッド数を設定できます!同時最大同時スレッド数を制御する2[_queuesetMaxConcurrentOperationCount:2];ヒント:この機能はNSOperationのみ!addDependencyを使用すると、タスクの実行順序を設定し、操作キューにわたって依存関係を指定できます.
// , “ ” , ,
//
// : , , 。
[op2 addDependency:op1];
[op3 addDependency:op2];
[op1 addDependency:op3];
: , , 。
3.3. GCD,C言語