NSBlockOperation使用

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    //手動設置任務之間依賴關系,進而改變自動的執(zhí)行順序
    [self createDependency];
}

- (void)createDependency {
    /*需求:往非主隊列中添加三個任務Task1;Task2;Task3
      自動執(zhí)行順序:三個任務同時執(zhí)行
      改后的執(zhí)行順序:任務三等待任務一和任務二執(zhí)行完畢,才執(zhí)行
      依賴關系:task3->task2; task3->task1
     */
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    NSBlockOperation *firstOperation = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"開始下載圖片一...");
        [NSThread sleepForTimeInterval:3];
        NSLog(@"下載圖片一完成");
    }];
    NSBlockOperation *secondOperation = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"開始下載圖片二...");
        [NSThread sleepForTimeInterval:5];
        NSLog(@"下載圖片二完成");
    }];
    NSBlockOperation *thirdOperation = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"下載圖片三");
    }];
    //設置/添加依賴關系
    /* 注意點:
       1. 千萬不要造成循環(huán)依賴(死鎖)
       2. 依賴關系在添加到隊列之前
     */
    [thirdOperation addDependency:firstOperation];
    [thirdOperation addDependency:secondOperation];
    [queue addOperation:firstOperation];
    [queue addOperation:secondOperation];
    [queue addOperation:thirdOperation];
}

//同步執(zhí)行
- (IBAction)blockSync:(id)sender {
    //1.創(chuàng)建操作對象
    NSBlockOperation *operation = [[NSBlockOperation alloc] init];
    //2.添加任務
    [operation addExecutionBlock:^{
        //要執(zhí)行的任務
        NSLog(@"下載圖片一:%@", [NSThread currentThread]);
    }];
    [operation addExecutionBlock:^{
        //要執(zhí)行的任務
        NSLog(@"下載圖片二:%@", [NSThread currentThread]);
    }];
    [operation addExecutionBlock:^{
        //要執(zhí)行的任務
        NSLog(@"下載圖片三:%@", [NSThread currentThread]);
    }];
    [operation addExecutionBlock:^{
        //要執(zhí)行的任務
        NSLog(@"下載圖片四:%@", [NSThread currentThread]);
    }];
    [operation addExecutionBlock:^{
        //要執(zhí)行的任務
        NSLog(@"下載圖片五:%@", [NSThread currentThread]);
    }];
    //3.執(zhí)行任務(同步執(zhí)行任務幾乎不用;沒有規(guī)律)
    [operation start];
}
//異步執(zhí)行 -》保證子線程執(zhí)行
- (IBAction)blockAsync:(id)sender {
    //1.創(chuàng)建操作對象(方式二:常用; 創(chuàng)建和添加任務合二為一)
    NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"下載圖片一:%@", [NSThread currentThread]);
    }];
    NSBlockOperation *anotherOperation = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"下載圖片二:%@", [NSThread currentThread]);
        //回到主線程(獲取主隊列)
//        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
//            //主線程執(zhí)行
//            NSLog(@"回到主線程更新界面:%@", [NSThread currentThread]);
//        }];
    }];
    
    NSBlockOperation *thirdOperation = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"下載圖片三....%@",[NSThread currentThread]);
    }];
    NSBlockOperation *forthOperation = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"下載圖片四....%@", [NSThread currentThread]);
    }];
    NSBlockOperation *fifthOperation = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"下載圖片五....%@", [NSThread currentThread]);
    }];
    NSBlockOperation *sixthOperation = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"下載圖片六....%@", [NSThread currentThread]);
    }];
    
    //2.創(chuàng)建非主隊列
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    //2.1 設置最大同時執(zhí)行的任務的個數(shù)
    queue.maxConcurrentOperationCount = 2;
    //3.操作對象放到非主隊列中(自動執(zhí)行)
    [queue addOperation:operation];
    [queue addOperation:anotherOperation];
    [queue addOperation:thirdOperation];
    [queue addOperation:forthOperation];
    [queue addOperation:fifthOperation];
    [queue addOperation:sixthOperation];
    
//    //如何暫停隊列中的所有任務;
//    [queue setSuspended:YES];
//    //把隊列中的所有暫停的任務重新啟動
//    [queue setSuspended:NO];
//    //如何取消隊列中的所有任務(不會恢復丈探;從隊列中移除)
//    [queue cancelAllOperations];
}

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子饶囚,更是在濱河造成了極大的恐慌,老刑警劉巖宠进,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晕拆,死亡現(xiàn)場離奇詭異,居然都是意外死亡材蹬,警方通過查閱死者的電腦和手機实幕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來堤器,“玉大人昆庇,你說我怎么就攤上這事≌⒗#” “怎么了整吆?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵拱撵,是天一觀的道長。 經(jīng)常有香客問我表蝙,道長拴测,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任府蛇,我火速辦了婚禮集索,結果婚禮上,老公的妹妹穿的比我還像新娘汇跨。我一直安慰自己务荆,他們只是感情好,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布穷遂。 她就那樣靜靜地躺著函匕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪塞颁。 梳的紋絲不亂的頭發(fā)上浦箱,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音祠锣,去河邊找鬼酷窥。 笑死,一個胖子當著我的面吹牛伴网,可吹牛的內(nèi)容都是我干的蓬推。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼澡腾,長吁一口氣:“原來是場噩夢啊……” “哼沸伏!你這毒婦竟也來了?” 一聲冷哼從身側響起动分,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤毅糟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后澜公,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體姆另,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年坟乾,在試婚紗的時候發(fā)現(xiàn)自己被綠了迹辐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡甚侣,死狀恐怖明吩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情殷费,我是刑警寧澤印荔,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布低葫,位于F島的核電站,受9級特大地震影響躏鱼,放射性物質(zhì)發(fā)生泄漏氮采。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一染苛、第九天 我趴在偏房一處隱蔽的房頂上張望鹊漠。 院中可真熱鬧,春花似錦茶行、人聲如沸躯概。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽娶靡。三九已至,卻和暖如春看锉,著一層夾襖步出監(jiān)牢的瞬間姿锭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工伯铣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留呻此,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓腔寡,卻偏偏與公主長得像焚鲜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子放前,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容