NSOperation 任務(wù)
NSInvocationOperation吮便、NSBlockOperation是它的子類我們平時(shí)只對(duì)這兩個(gè)子類進(jìn)行操作
NSInvocationOperation初始化方法:
NSInvocationOperation* op = [[NSInvocationOperationalloc]initWithTarget:selfselector:@selector(runOP)object:nil];
[opstart];
NSBlockOperation初始化方法:
NSBlockOperation* op1 = [NSBlockOperationblockOperationWithBlock:^{
NSLog(@"op1 == %@",[NSThreadcurrentThread]);//主線程執(zhí)行
}];
[op1addExecutionBlock:^{
NSLog(@"op12 == %@",[NSThreadcurrentThread]);//非主線程執(zhí)行
}];
[op1start];
NSOperationQueue 隊(duì)列
NSOperationQueue* queue = [[NSOperationQueuealloc]init];//創(chuàng)建隊(duì)列 會(huì)開(kāi)啟新的線程
//NSOperationQueue * queue = [NSOperationQueue mainQueue];//創(chuàng)建主線程隊(duì)列 執(zhí)行這個(gè)隊(duì)列里的任務(wù)不會(huì)開(kāi)啟新的線程(addExecutionBlock:^{}]除外)
queue.maxConcurrentOperationCount=1;//串行
queue.maxConcurrentOperationCount=-1;//并行
queue.maxConcurrentOperationCount=2 3 4...;//指定并發(fā)數(shù)
[opaddDependency:op1];//依賴關(guān)系op1執(zhí)行完成后才會(huì)執(zhí)行op
[queue addOperation:op];任務(wù)到加入隊(duì)列中
[queue addOperation:op1];
[queue addOperationWithBlock:^{
NSLog(@"que == %@",[NSThreadcurrentThread]);
}];
注意加入隊(duì)列中的任務(wù)不需要start 否則會(huì)crash.