創(chuàng)建方法
//方法一:操作隊(duì)列
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
//最大操作數(shù):設(shè)為1的話申屹,從前往后執(zhí)行;設(shè)置為其他雕旨,并發(fā)執(zhí)行
queue.maxConcurrentOperationCount = 1;
//被掛起(暫停)目的是:加載了所有的任務(wù)才執(zhí)行隊(duì)列
queue.suspended = YES;
[queue addOperationWithBlock:^{
NSLog(@"1--是否為主線程:%d",[[NSThread currentThread]isMainThread]);
NSLog(@"1--優(yōu)先級:%f",[NSThread threadPriority]);
}];
//方法二:NSOperation(操作任務(wù))的子類: NSInvocationOperation
NSInvocationOperation *invocationOp = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(invocationAction:) object:@"invocation"];
//添加到隊(duì)列中
[queue addOperation:invocationOp];
//監(jiān)聽invocationOp任務(wù)是否完成常遂,完成后調(diào)用此方法
invocationOp.completionBlock = ^(){
NSLog(@"2--invocationOp任務(wù)完成");
};
//NSInvocationOperation線程實(shí)現(xiàn)的方法
- (void)invocationAction:(NSString *)t{
NSLog(@"2--%@",t);
NSLog(@"2--是否為主線程:%d",[[NSThread currentThread]isMainThread]);
NSLog(@"2--優(yōu)先級:%f",[NSThread threadPriority]);
}
//方法三:NSOperation(操作任務(wù))的子類:NSBlockOperation可以并發(fā)執(zhí)行一個(gè)或多個(gè)任務(wù)
NSBlockOperation *blockOp = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"3---是否為主線程:%d",[[NSThread currentThread]isMainThread]);
NSLog(@"3--優(yōu)先級:%f",[NSThread threadPriority]);
}];
[blockOp addExecutionBlock:^{
NSLog(@"3--再執(zhí)行一個(gè)任務(wù)");
}];
[blockOp addExecutionBlock:^{
NSLog(@"3--又執(zhí)行一個(gè)任務(wù)");
}];
//該方法監(jiān)聽blockOp任務(wù)是否完成想暗,完成后調(diào)用此方法
blockOp.completionBlock = ^(){
NSLog(@"3--blocp執(zhí)行完成");
};
[queue addOperation:blockOp];
//添加依賴關(guān)系:意思是先執(zhí)行blockOp,再執(zhí)行invocationOp
[invocationOp addDependency:blockOp];
//方法四:自定義opration
CustomOpration *customOpration = [[CustomOpration alloc]init];
//設(shè)置優(yōu)先級:來改變?nèi)蝿?wù)處理的順序,這里設(shè)置為最高等級隘冲,最先處理
customOpration.queuePriority = NSOperationQueuePriorityVeryHigh;
[queue addOperation:customOpration];
//自定義CustomOpration.m 文件中的代碼
#import "CustomOpration.h"
@implementation CustomOpration
- (void)main{
for (int i=0; i<5; i++) {
NSLog(@"4------%d",i);
}
}
取消方法
//取消某個(gè)任務(wù) 抵赢,這里的cancelOp已經(jīng)設(shè)為全局欺劳,目的為了后面方便使用
cancelOp = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(cancelOpAction) object:nil];
[self performSelector:@selector(cancelSingle:) withObject:cancelOp afterDelay:1];
[queue addOperation:cancelOp];
//取消所有隊(duì)列,不過只能取消沒有執(zhí)行的隊(duì)列
//[queue cancelAllOperations];
//取消操作隊(duì)列暫停
queue.suspended = NO;
}
//取消的方法
- (void)cancelSingle:(NSInvocationOperation *)op{
[op cancel];
}
//cancelOp線程實(shí)現(xiàn)的方法
- (void)cancelOpAction{
//休眠2秒
[NSThread sleepForTimeInterval:2];
if ([cancelOp isCancelled]) {
//如果確定已經(jīng)取消铅鲤,打印下面的語句划提,其他語句不打印
NSLog(@"已經(jīng)取消了,不會(huì)執(zhí)行以下語句");
}
NSLog(@"我能執(zhí)行嗎");
}