iOS-關于隊列的初級整理1

今天先聊一聊最簡單的并發隊列,閑話不多說上代碼

- (void)viewDidLoad {
    [super viewDidLoad];

   
    //主隊列
    
    NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
    
    [mainQueue addOperationWithBlock:^{
        for (int i = 0; i < 10; i ++) {
            NSLog(@"mainQueue :%d",i);
        }
    }];
    
    
    //并發隊列 同步執行
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    
    queue.maxConcurrentOperationCount = 1;
    
    queue.suspended = YES;
    
    [queue addOperationWithBlock:^{
        for (int i = 0; i < 50; i ++) {
            NSLog(@"queue :%d",i);
        }
        
    }];
    

    
    NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(operation) object:nil];

    [queue addOperation:operation1];
    
  
    NSBlockOperation *operation2 = [NSBlockOperation blockOperationWithBlock:^{
        for (int i = 0 ; i < 30 ; i ++) {
            NSLog(@"operation2 : %d",i);
        }
    }];
    
    [queue addOperation:operation2];
    //2依賴與1,1先執行 1執行完了在是2
    [operation2 addDependency:operation1];
    
    queue.suspended = NO;
    
    for (int i = 0; i < 40; i ++) {
        NSLog(@"viewDidLoad :%d",i);
    }

 
}

- (void)operation  {
    
    for (int i = 0 ; i < 50; i ++) {
        NSLog(@"operation1 : %d",i);
    }
}


我創建了一個主隊列,用兩種方法添加了兩個并發隊列

運行打印出來的結果如下圖


屏幕快照 2017-02-21 上午11.26.08.png

可以清楚的看到,queue和viewDidLoad是同時進行的,之后當queue結束了執行operation1,又因為operation1依賴于operation2,依次執行。設置了最大的并發數為1是為了讓程序更為清晰的顯示,我畫個圖來做個說明。

屏幕快照 2017-02-21 上午11.37.34.png

因為打印設置的循環的值設置的不一樣,以圖片的長度來代表下執行所需要的時間。可能文字的表述不是很精確,類比下銀行排隊,線程相當于不同的窗口,張三李四同時進入銀行辦理業務兩個窗口同時開放所以兩人可以同時進行,后來來了王五,因為就只有兩個窗口,王五不得不排隊。

關于主線程的應用最直觀的就在于刷新界面上,大家都知道刷新界面必須放在主線程中進行,那么不把刷新動作放在主線程會出現什么問題呢?我測試了下也不是說界面不會顯示,顯示也是會顯示,但會出現有時界面出現,有時界面沒有加載的情況。有興趣的小伙伴可以去嘗試下,另外最后大家可以將viewDidLoad的打印位置換一換看看打印出來的效果有什么不同,這是為了什么?關于隊列相關的這幾天我都會整理下,大家有興趣的可以一起來討論下。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • __block和__weak修飾符的區別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,354評論 0 6
  • 從哪說起呢? 單純講多線程編程真的不知道從哪下嘴。。 不如我直接引用一個最簡單的問題,以這個作為切入點好了 在ma...
    Mr_Baymax閱讀 2,818評論 1 17
  • 218.241.181.202 wxhl60 123456 192.168.10.253 wxhl66 wxhl6...
    CYC666閱讀 1,419評論 0 6
  • iOS開發中常用的幾種多線程方案,簡單做個小結,方便日后查閱。 NSThead GCD NSOperation &...
    木木小林醬閱讀 332評論 0 1
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,199評論 30 471