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