多執行緒 NSOperation

2022-07-28 05:30:16 字數 2755 閱讀 8338

多執行緒

nsoperation

nsoperation的作用

p配合使用nsoperation和nsoperationqueue也能實現多執行緒程式設計

pnsoperation和nsoperationqueue實現多執行緒的具體步驟

p先將需要執行的操作封裝到乙個nsoperation物件中

p然後將nsoperation物件新增到nsoperationqueue中

p系統會自動將nsoperationqueue中的nsoperation取出來

p將取出的nsoperation封裝的操作放到一條新執行緒中執行

pnsoperation的子類

nsoperation是個抽象類,並不具備封裝操作的能力,必須使用它的子類

使用nsoperation子類的方式有3種

pnsinvocationoperation

pnsblockoperation

p自定義子類繼承nsoperation,實現內部相應的方法

nsinvocationoperation

建立nsinvocationoperation物件

-(id)initwithtarget:(id)target selector:(sel)sel object:(id)arg;

呼叫start方法開始執行操作

-(void)start;

一旦執行操作,就會呼叫target的sel方法

注意p預設情況下,呼叫了start方法後並不會開一條新執行緒去執行操作,而是在當前執行緒同步執行操作

p只有將nsoperation放到乙個nsoperationqueue中,才會非同步執行操作

nsblockoperation

建立nsblockoperation物件

+(id)blockoperationwithblock:(void (^)(void))block;

通過addexecutionblock:方法新增更多的操作

- (void)addexecutionblock:(void (^)(void))block;

注意:只要nsblockoperation封裝的運算元 > 1,就會非同步執行操作

nsoperationqueue

nsoperationqueue的作用

pnsoperation可以呼叫start方法來執行任務,但預設是同步執行的

p如果將nsoperation新增到nsoperationqueue(操作佇列)中,系統會自動非同步執行nsoperation中的操作

pn新增操作到nsoperationqueue中

-(void)addoperation:(nsoperation *)op;

-(void)addoperationwithblock:(void (^)(void))block;

最大併發數

什麼是併發數

p同時執行的任務數

p比如,同時開3個執行緒執行3個任務,併發數就是3

最大併發數的相關方法

-(nsinteger)maxconcurrentoperationcount;

-(void)setmaxconcurrentoperationcount:(nsinteger)cnt;

佇列的取消、暫停、恢復

取消佇列的所有操作

-(void)cancelalloperations;

(void)cancel方法取消單個操作

暫停和恢復佇列

-(void)setsuspended:(bool)b; // yes代表暫停佇列,no代表恢復佇列

-(bool)issuspended;

操作優先順序

設定nsoperation在queue中的優先順序,可以改變操作的執行優先順序

-(nsoperationqueuepriority)queuepriority;

-(void)setqueuepriority:(nsoperationqueuepriority)p;

優先順序的取值

pnsoperationqueuepriorityverylow

= -8l,

pnsoperationqueueprioritylow

= -4l,

pnsoperationqueueprioritynormal

= 0,

pnsoperationqueuepriorityhigh

= 4,

pnsoperationqueuepriorityveryhigh

= 8操作依賴

nsoperation之間可以設定依賴來保證執行順序

p比如一定要讓操作a執行完後,才能執行操作b,可以這麼寫

[operationb

adddependency:operationa]; // 操作b依賴於操作a

可以在不同queue的nsoperation之間建立依賴關係

操作的監聽

可以監聽乙個操作的執行完畢

-(void (^)(void))completionblock;

-(void)setcompletionblock:(void (^)(void))block;

自定義nsoperation

自定義nsoperation的步驟很簡單

p重寫-

(void)main方法,在裡面實現想執行的任務

p重寫- (void)main方法的注意點

p自己建立自動釋放池(因為如果是非同步操作,無法訪問主線程的自動釋放池)

p經常通過-

(bool)iscancelled方法檢測操作是否被取消,對取消做出響應

多執行緒NSOperation

簡介 nsoperation的作用 配合使用nsoperation和nsoperationqueue也能實現多執行緒程式設計 nsoperation和nsoperationqueue實現多執行緒的具體步驟 先將需要執行的操作封裝到乙個nsoperation物件中 然後將nsoperation物件新增...

iOS 多執行緒NSOperation

nsoperation有兩個子類 nsinvocationoperation 和 nsblockoperation nsoperation 如果有多個任務事,預設是非同步執行的,如下 nsblockoperation operation nsblockoperation blockoperation...

iOS多執行緒 NSOperation

他是乙個抽象類,能夠與nsoperationqueue結合實現多執行緒操作。要使用nsoperation,需要實現它的子類 nsinvocationoperation nsblockoperation和自定義類。實現思路 1 建立nsoperationqueue佇列物件 2 執行操作 start開始...