NSOperation
-
NSOperation
的作用: 配合使用NSOperation
和NSOperationQueue
實現多線程 - 將需要執行的操作封裝到一個
NSOperation
對象中,再將NSOperation
對象添加到NSOperationQueue
中,系統將取出NSOperation
放到一條新線程中執行 -
NSOperation
的子類 NSInvocationOperation
//創建NSInvocationOperation對象
- (id)initWithTarget:(id)target selector:(SEL)sel object:(id)arg;
//調用start方法開始執行操作
- (void)start;
NSBlockOperation
//創建NSBlockOperation對象
+ (id)blockOperationWithBlock:(void (^)(void))block;
//通過addExecutionBlock:方法添加更多的操作
- (void)addExecutionBlock:(void (^)(void))block;
//調用start方法開始執行操作
- (void)start;
NSOperationQueue
- 作用:
NSOperation
可以調用start方法
來執行任務,但默認是同步執行的
如果將NSOperation
添加到NSOperationQueue
(操作隊列)中,系統會自動異步執行NSOperation
中的操作 - 相關函數
- (void)addOperation:(NSOperation *)op;
- (void)addOperationWithBlock:(void (^)(void))block;
//最大并發數
- (NSInteger)maxConcurrentOperationCount;
- (void)setMaxConcurrentOperationCount:(NSInteger)cnt;
//取消隊列的所有操作
- (void)cancelAllOperations;
//提示:也可以調用NSOperation的- (void)cancel方法取消單個操作
//暫停和恢復隊列
- (void)setSuspended:(BOOL)b; // YES代表暫停隊列,NO代表恢復隊列
- (BOOL)isSuspended;
- (BOOL)isCancelled;//判斷是否取消任務
- 操作依賴
-
NSOperation
可以設置依賴來保證執行順序
[operationB addDependency:operationA]; // 操作B依賴于操作A
注意!不能設置成相互依賴,比如A依賴B,B依賴A
- 操作的監聽
//可以監聽一個操作的執行完畢
- (void (^)(void))completionBlock;
- (void)setCompletionBlock:(void (^)(void))block;
- 自定義
NSOperation
- 重寫- (void)main方法,在里面實現想執行的任務
- 重寫- (void)main方法的注意點
- 自己創建自動釋放池(因為如果是異步操作,無法訪問主線程的自動釋放池)
- 經常通過- (BOOL)isCancelled方法檢測操作是否被取消,對取消做出響應