NSoperation是对GCD进一步的封装的oc编写的api
NSOperation和NSOperationQueue配合实现多线程执行任务
先将需要执行的操作封装到一个NSOperation对象中
然后将NSOperation对象添加到NSOperationQueue
NSoperation是抽象类,使用操作任务时要使用NSInvocationOperation和
NSBlockOperation的两个子类或者自定义一个类继承于NSOperation
如果它们不加入到队列里边,则不会开启新线程,只能在主线程中运行,加入到队列中才开启新的线程 还有向操作中追加任务,系统也会自动开启新线程
NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run) object:nil];
//最大并发数指的是同一时间执行的任务的数量,不是指开的线程数,它不能控制开启的线程数,开启线程是由系统决定的
NSOperationQueue *hqueue = [[NSOperationQueue alloc] init];
hqueue.maxConcurrentOperationCount = 3;
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"=--3--=%@",[NSThread currentThread]);
}];
NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"=--4--=s%@",[NSThread currentThread]);
}];
[op3 addExecutionBlock:^{
NSLog(@"=--32--=%@",[NSThread currentThread]);
}];
[op4 addExecutionBlock:^{
NSLog(@"=--42--=%@",[NSThread currentThread]);
}];
[op3 start];
[op4 start];
[op3 addDependency:op4];
操作依赖 ,很强大,也可以 这个操作依赖另一个队列中操作。