iOS多執行緒 NSOperation

2021-07-14 20:25:05 字數 2400 閱讀 4626

他是乙個抽象類,能夠與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 乙個繼承自...