美文网首页iOS
多线程编程之NSOperation/NSOperationQue

多线程编程之NSOperation/NSOperationQue

作者: 阿咿呀嘿 | 来源:发表于2015-04-05 12:17 被阅读61次

    NSOperation/NSOperationQueue是基于GCD实现的Objective-C的API

    NSOperation/NSOperationQueue是面向对象的

    NSOperation/NSOperationQueue可以实现限制最大并发数量和操作之间依赖关系的特性

    一、NSOperationQueue队列类型

    1、主队列

    NSOperationQueue *queue = [NSOperationQueue mainQueue];

    2、自定义队列

    NSOperationQueue *myQueue = [[NSOperationQueue alloc] init];

    //设置最大并发数量

    myQueue.maxConcurrentOperationCount=10;

    二、操作类型

    1、调度操作-使用selector

    NSInvocationOperation *invocationOP = [[NSInvocationOperation  alloc] initWithTarget:self  selector:@selector(operationAction:) object:@"invocationOP:something"];

    2、定义块操作-使用BLOCK

    NSBlockOperation *blockOP = [NSBlockOperation blockOperationWithBlock:^{

    NSLog(@"blickOP:%@", [NSThread currentThread]);

    }];

    三、定义操作之间的依赖关系

    //为操作增加依赖关系:invocationOP执行完后才执行blockOP

    [blockOP addDependency:invocationOP];

    四、执行操作

    1、将操作添加到指定队列后,立即自动开始执行操作

    [queue addOperation:invocationOP];

    [myQueue addOperationWithBlock:^{

    NSLog(@"block:%@",[NSThread currentThread]);

    }];

    2、手动开始执行操作,会在当前队列开始执行

    [blockOP start];

    可以通过重写操作对象的start方法或main方法实现自定义的执行方式。

    五、获取队列中的操作数

    NSLog(@"myQueue:%lu",(unsignedlong)myQueue.operationCount);

    六、获取操作的优先级

    NSLog(@"invocationOP:%li",invocationOP.queuePriority);

    七、获取操作的状态:isExecuting/isFinished/isCanceled/isConcurrent

    NSLog(@"invocationOP:%i",blockOP.isExecuting);

    相关文章

      网友评论

        本文标题:多线程编程之NSOperation/NSOperationQue

        本文链接:https://www.haomeiwen.com/subject/qrwaxttx.html