NSOperationQueue

-(IBAction)operationQueue:(id)sender{
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
queue.maxConcurrentOperationCount = 10;//最多添加10個線程。NSOperationQueueDefaultMaxConcurrentOperationCount 默認值
//queue.suspended = YES;//暫停隊列
//queue.suspended = YES;//重新開始隊列
//[queue cancelAllOperations];//取消隊列“cancelAllOperations”並沒有做太多的工作,他只是對隊列中的每一個操作調用“cancel”方法 — 這並沒有起很大作用!:] 如果一個操作並沒有開始,然後你對它調用“cancel”方法,操作會被取消,並從隊列中移除。然而,如果一個操作已經在執行了,這就要由單獨的操作去識別撤銷(通過檢查isCancelled屬性)然後停止它所做的工作。

queue.name = @"測試隊列";
int index = 1;
MyTask *task = [[MyTask alloc]init];
task.operationId = index++;
//[task cancel];//當任務啓動的時候,需要具體的進程來取消
[task setQueuePriority:NSOperationQueuePriorityHigh];//優先級
[queue addOperation:task];

/// 還可以繼續添加任務

/*
 task = [[MyTask alloc]init];
 task.operationId = index++;
[queue addOperation:task];

//兩個操作提交的時間間隔很近,線程池中的線程,誰先啓動是不定的
*/

/// 按照順序執行
task = [[MyTask alloc]init];
task.operationId = index++;
if([[queue operations]count]>0){
    MyTask *task2 = [[queue operations]lastObject];
    [task addDependency:task2];//添加依賴
    //[task removeDependency:task2];//移除依賴
}
[queue addOperation:task];

// blockqueue
[queue addOperationWithBlock:^{
    [NSThread sleepForTimeInterval:3];
    [[NSOperationQueue mainQueue]addOperationWithBlock:^{
        DLog(@"回到主線程完成任務");
    }];
}];

}

pragma mark - NSOperationQueueViewController

  • (IBAction)NSOperationQueueViewController:(id)sender{
    OperationViewController * vc = [[OperationViewController alloc]init];
    [self.navigationController pushViewController:vc animated:YES];
    }
發佈了50 篇原創文章 · 獲贊 8 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章