若不將NSOperation對象添加到NSOperationQueue中,操作只會在當前線程執(zhí)行,且需要手動開始執(zhí)行操作
NSoperation的子類
NSInvocationOperation
//創(chuàng)建操作NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run) object:nil];//開始執(zhí)行操作[operation start];NSBlockOperation(當操作數(shù)大于1時,異步執(zhí)行)
//創(chuàng)建操作NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ //操作封裝的任務代碼}];//添加操作[operation addExecutionBlock:^{ //操作封裝的任務代碼}];//開始執(zhí)行操作[operation start];自定義子類的步驟
設置操作完成時的回調
//創(chuàng)建操作NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{ //任務代碼}];//設置回調operation.completionBlock = ^{ //操作完成時執(zhí)行的代碼};作用
NSOperationQueue的相關操作
創(chuàng)建操作隊列
獲取主操作隊列
獲取當前操作隊列
往隊列中添加操作
設置最大并發(fā)操作數(shù)
暫停/啟動隊列中的任務
取消隊列中的任務
創(chuàng)建操作隊列
NSOperationQueue *queue = [[NSOperationQueue alloc] init]往隊列中添加操作
/**方法一*///創(chuàng)建操作NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(download) object:nil] //download為操作封裝的任務方法NSBlockOperation *operation2 = [NSBlockOperation blockOperationWithBlock:^{ //任務代碼}];//添加操作[queue addOperation:operation1];[queue addOperation:operation2];/**方法二*///添加操作[queue addOperationWithBlock:^{ //操作封裝的任務}];作用
建立操作依賴的步驟
創(chuàng)建操作隊列
NSOperationQueue *queue = [[NSOperationQueue alloc] init]添加操作
NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{ //任務1代碼}];NSBlockOperation *operation2 = [NSBlockOperation blockOperationWithBlock:^{ //任務2代碼}];建立依賴關系(必須在操作被添加到隊列之前)
[operation1 addDependency:operation2];將操作添加到隊列
[queue addOperation:operation1];[queue addOperation:operation2];從主線程到子線程
從子線程到主線程
將需要執(zhí)行的操作,添加到主操作隊列中即可(該操作將運行在主runLoop的common模式下)
[[NSOperationQueue mainQueue] addOperationWithBlock:^{ //需要在主線程中執(zhí)行的任務代碼 }];
|
新聞熱點
疑難解答