多執行緒
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開始...