1. 建立了3個任務,加入到隊列中去執行
- (void)createOperationQueue{ //建立一個隊列 NSOperationQueue *queue = [[NSOperationQueue alloc]init]; //建立一個任務 LJOperation *op1 = [[LJOperation alloc]init]; op1.nameStr = @"op1"; LJOperation *op2 = [[LJOperation alloc]init]; op2.nameStr = @"op2"; LJOperation *op3 = [[LJOperation alloc]init]; op3.nameStr = @"op3"; NSLog(@"block----%@",[NSThread currentThread]); //把任務添加到隊列當中去,相當於調用了任務的start方法 //倘若我們希望LJOperation執行某種方法,只需要重寫start方法就可以,(系統會自動去調start方法) [queue addOperation:op1]; [queue addOperation:op2]; [queue addOperation:op3];}
看看控制台列印的結果;
2017-07-07 22:49:04.195 IOSNetWorkDemo[4452:393020] __FUNCTION__start_op1
2017-07-07 22:49:04.195 IOSNetWorkDemo[4452:393051] __FUNCTION__start_op3
2017-07-07 22:49:04.195 IOSNetWorkDemo[4452:393022] __FUNCTION__start_op2
從上面的結果可以看出op1先執行,然後op3,然後op2,沒有按照順序執行。
這是為什麼了。因為當我們把operation添加到隊列中去後,就相當於把operation交給了系統,然後由系統決定它的執行順序。
上面自訂的 NSOperation
@interface LJOperation : NSOperation//隨便傳入一個名字,作為Operation區分用@property(nonatomic,copy)NSString *nameStr;@end
#import "LJOperation.h"@implementation LJOperation//重寫NSOperation的start方法,在此處寫下你想執行的方法代碼- (void)start{ //do something NSLog(@"%s",__FUNCTION__); NSLog(@"__FUNCTION__start_%@",self.nameStr);}- (void)main{ NSLog(@"%s",__FUNCTION__); // NSLog(@"__FUNCTION__main_%@",self.nameStr);}