整理一下這段時間對多線程的認識,不足的地方還望指出。
先說一下NSThread、GCD、NSOperation的區別。
NSThread
優點:比其他的兩個更輕量級。
缺點:需要自己管理線程的生命周期,線程同步。線程同步對數據的加鎖會有一定的系統開銷。
使用:大部分時間用來程序員做測試。使用可參考
NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(task) object:nil];
[thread start];
- (void)task
{
NSLog(@"__%@",[NSThread currentThread]);
}
GCD
優點:是 Apple 開發的一個多核編程的解決方法,簡單易用,效率高,速度快,基于C語言,更底層更高效,并且不是Cocoa框架的一部分,自動管理線程生命周期。
缺點:使用GCD的場景如果很復雜,就有非常大的可能遇到死鎖問題。
使用:iOS多線程--徹底學會多線程之『GCD』
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"__%@",[NSThread currentThread]);
});
NSOperation
優點:NSOperation是OC中多線程技術的一種,是對GCD的OC包裝,可設置NSOperation的依賴關系,NSOperation可以設置自身的優先級,NSOperation是一個抽象類實際開發中常用的兩個類是NSInvocationOperation和NSBlockOperation,同樣我們可以自定義NSOperation等。
缺點:直接使用GCD效率確實會更高效,NSOperation會多一點開銷。
使用:可參考認識和使用NSOperation
NSBlockOperation *operation_1 = [NSBlockOperation blockOperationWithBlock:^{
for (int i = 0; i< 100; i++) {
NSLog(@"________1111");
}
}];
NSBlockOperation *operation_2 = [NSBlockOperation blockOperationWithBlock:^{
for (int i = 0; i< 100; i++) {
NSLog(@"________2222");
}
}];
NSBlockOperation *operation_3 = [NSBlockOperation blockOperationWithBlock:^{
for (int i = 0; i< 100; i++) {
NSLog(@"________3333");
}
}];
//添加依賴
[operation_3 addDependency:operation_1];
[operation_3 addDependency:operation_2];
//創建NSOperationQueue
NSOperationQueue * queue=[[NSOperationQueue alloc]init];
//把操作添加到隊列中
[queue addOperation:operation_1];
[queue addOperation:operation_2];
[queue addOperation:operation_3];