版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2017.08.16 |
前言
信號量機制是多線程通信中的比較重要的一部分做葵,對于
NSOperation
可以設置并發(fā)數(shù)得院,但是對于GCD
就不能設置并發(fā)數(shù)了拜银,那么就只能靠信號量機制了缔逛。接下來這幾篇就會詳細的說一下并發(fā)機制。感興趣的可以看這幾篇文章冰悠。
1. iOS與多線程(一) —— GCD中的信號量及幾個重要函數(shù)
2. iOS與多線程(二) —— NSOperation實現(xiàn)多并發(fā)之創(chuàng)建任務
隊列的創(chuàng)建
上一篇主要講了NSOperation API
接口以及創(chuàng)建任務的方法堡妒,下面就說一下隊列的創(chuàng)建方法。NSOperationQueue
可以分為兩種隊列溉卓,主隊列和其他隊列皮迟,其他隊列里面還可以實現(xiàn)串行和并發(fā)功能。
- 主隊列:添加到主隊列中的任務都會放在主線程中執(zhí)行桑寨。
NSOperationQueue *queue = [NSOperationQueue mainQueue];
- 其他隊列:添加到其他隊列中的任務都會放在子線程中執(zhí)行伏尼。
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
添加任務到隊列
下面我們就看一下添加任務到隊列。
方法1
可以使用方法- (void)addOperation:(NSOperation *)op;
下面還是看代碼尉尾。
#import "JJOperationQueueVC.h"
@interface JJOperationQueueVC ()
@end
@implementation JJOperationQueueVC
#pragma mark - Override Base Function
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
//創(chuàng)建隊列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
//創(chuàng)建任務爆阶,你也可以使用NSInvocationOperation,我這里就只用NSBlockOperation做個例子了
NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"blockOperation");
NSLog(@"thread = %@",[NSThread currentThread]);
}];
[queue addOperation:blockOperation];
}
@end
看輸出結果
2017-08-16 17:36:13.590386+0800 JJOC[10142:4509963] blockOperation
2017-08-16 17:36:13.590538+0800 JJOC[10142:4509963] thread = <NSThread: 0x17407ff40>{number = 4, name = (null)}
可以發(fā)現(xiàn)開啟了新的線程,同時將任務放在隊列里面辨图,任務就會立即執(zhí)行班套,不同調(diào)用其他方法才開始執(zhí)行。
方法2
使用- (void)addOperationWithBlock:(void (^)(void))block NS_AVAILABLE(10_6, 4_0);
還是直接看代碼徒役。
#import "JJOperationQueueVC.h"
@interface JJOperationQueueVC ()
@end
@implementation JJOperationQueueVC
#pragma mark - Override Base Function
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
//創(chuàng)建隊列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperationWithBlock:^{
NSLog(@"blockOperation");
NSLog(@"thread = %@",[NSThread currentThread]);
}];
}
@end
下面看輸出結果
2017-08-16 17:38:32.428260+0800 JJOC[10146:4510462] blockOperation
2017-08-16 17:38:32.428661+0800 JJOC[10146:4510462] thread = <NSThread: 0x170075a00>{number = 4, name = (null)}
可見也開啟了一個新的線程孽尽。
后記
未完,待續(xù)~~~
秋