他是乙個抽象類,能夠與nsoperationqueue結合實現多執行緒操作。要使用nsoperation,需要實現它的子類:nsinvocationoperation、nsblockoperation和自定義類。
實現思路
(1)建立nsoperationqueue佇列物件
(2)執行操作
①start開始:一律在主線程中同步執行
②加入佇列,自動非同步併發執行
實現思路:①建立佇列 ②建立操作 ③加入佇列
任務封裝在block中。自動併發執行
- (void)viewdidload ];
建立操作2
nsblockoperation *operation2 = [nsblockoperation blockoperationwithblock:^];
建立操作3
nsblockoperation *operation3 = [nsblockoperation blockoperationwithblock:^];
加入佇列方式1
[queue addoperation:operation1];
加入佇列方式2
[queue addoperations:@[operation2,operation3] waituntilfinished:yes];
}
也可以同乙個操作中新增多個任務,每個任務也可以非同步併發執行。使用addexecuteionblock:方法來新增任務。
- (void)viewdidload ];
//3 繼續新增任務到操作
[operation1 addexecutionblock:^];
//4 將操作加入佇列
[queue addoperation:operation1];
}
獲取主佇列
手動建立佇列
手動建立的佇列,預設是併發佇列,是否開啟新執行緒,需要根據maxconcurrentoperationcount(最大併發執行緒數)來決定
//手動建立佇列
nsoperationqueue *queue = [nsoperationqueue alloc]init];
- (void)viewdidload ];
}];//3 加入佇列
[queue addoperation:operation];
}
任務a、b、c非同步處理,但是任務b的完成依賴於任務a的完成,任務c的完成依賴於任務b的完成。這就叫做執行緒間的依賴。可以通過[operation adddependency:oper1]來新增依賴。
__block uiimage *image1 = nil;
__block uiimage *logo = nil;
//1 建立佇列
nsoperationqueue *queue = [[nsoperationqueue alloc]init];
//2 建立操作a
nsblockoperation *operationa = [nsblockoperation blockoperationwithblock:^];
//3 建立操作b
nsblockoperation *operationb = [nsblockoperation blockoperationwithblock:^];
//4 建立操作c
nsblockoperation *operationc = [nsblockoperation blockoperationwithblock:^];
}];//4 建立依賴
[operationc adddependency:operationa];
[operationc adddependency:operationb];
//5 加入佇列
[queue addoperations:@[operationa,operationb,operationc] waituntilfinished:no];
取消佇列任務
使用場景:通常使用在didreceivememorywarning方法中,當收到記憶體告警後,取消佇列中所有的任務。
//取消佇列中所有的任務
[queue cancelalloperations];
暫停佇列任務//暫停佇列中的任務
[queue setsuspended:yes];
//恢復佇列中的任務
[queue setsuspended:no];
設定最大併發執行緒數//設定最大併發執行緒數
queue.maxconcurrentoperationcount = 2;
iOS多執行緒
iphone 中的執行緒應用並不是無節制的,官方給出的資料顯示iphone os下的主線程的堆疊大小是1m,第二個執行緒開始都是512kb。並且該值不能通過編譯器開關或執行緒api函式來更改。只有主線程有直接修改ui的能力。一 nsoperation和nsoperationqueue 1 乙個繼承自...
iOS多執行緒
iphone 中的執行緒應用並不是無節制的,官方給出的資料顯示iphone os下的主線程的堆疊大小是1m,第二個執行緒開始都是512kb。並且該值不能通過編譯器開關或執行緒api函式來更改。只有主線程有直接修改ui的能力。一 nsoperation和nsoperationqueue 1 乙個繼承自...
iOS多執行緒
iphone 中的執行緒應用並不是無節制的,官方給出的資料顯示iphone os下的主線程的堆疊大小是1m,第二個執行緒開始都是512kb。並且該值不能通過編譯器開關或執行緒api函式來更改。只有主線程有直接修改ui的能力。一 nsoperation和nsoperationqueue 1 乙個繼承自...