- (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];
}
NSBlockOperation使用
最后編輯于 :
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來堤器,“玉大人昆庇,你說我怎么就攤上這事≌⒗#” “怎么了整吆?”我有些...
- 文/不壞的土叔 我叫張陵拱撵,是天一觀的道長。 經(jīng)常有香客問我表蝙,道長拴测,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任府蛇,我火速辦了婚禮集索,結果婚禮上,老公的妹妹穿的比我還像新娘汇跨。我一直安慰自己务荆,他們只是感情好,可當我...
- 文/花漫 我一把揭開白布穷遂。 她就那樣靜靜地躺著函匕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪塞颁。 梳的紋絲不亂的頭發(fā)上浦箱,一...
- 文/蒼蘭香墨 我猛地睜開眼澡腾,長吁一口氣:“原來是場噩夢啊……” “哼沸伏!你這毒婦竟也來了?” 一聲冷哼從身側響起动分,我...
- 正文 年R本政府宣布低葫,位于F島的核電站,受9級特大地震影響躏鱼,放射性物質(zhì)發(fā)生泄漏氮采。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一染苛、第九天 我趴在偏房一處隱蔽的房頂上張望鹊漠。 院中可真熱鬧,春花似錦茶行、人聲如沸躯概。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽娶靡。三九已至,卻和暖如春看锉,著一層夾襖步出監(jiān)牢的瞬間姿锭,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 1 NSOperation NSOperation 自身是一個抽象類忿磅,定義了一個要執(zhí)行的工作,可以定義一個 NSO...
- 文 | 空境180s欄目組 這里我想說 我們每一期修出來的不一定是標答或者最好的 每個人的創(chuàng)意和腦洞我們都尊重 修...