美文网首页
多线程编程 - NSOperationQueue

多线程编程 - NSOperationQueue

作者: N最珍贵 | 来源:发表于2016-10-24 14:28 被阅读0次

    一个NSOperation对象可以通过调用start方法来执行任务,默认是同步执行的。也可以将NSOperation添加到一个NSOperationQueue(操作队列)中去执行,而且是异步执行的。

    创建一个操作队列:

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

    添加NSOperation到NSOperationQueue中

    NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{

    NSLog(@"执行第1次操作,线程:%@", [NSThread currentThread]);

    }];

    [queue addOperation:operation1];

    [queue addOperationWithBlock:^() {

    NSLog(@"执行一个新的操作,线程:%@", [NSThread currentThread]); 

    }]; 

    NSOperation添加到queue之后,通常短时间内就会得到运行。但是如果存在依赖,或者整个queue被暂停等原因,也可能需要等待。

    注意:NSOperation添加到queue之后,绝对不要再修改NSOperation对象的状态。因为NSOperation对象可能会在任何时候运行,因此改变NSOperation对象的依赖或数据会产生不利的影响。你只能查看NSOperation对象的状态, 比如是否正在运行、等待运行、已经完成等

    添加NSOperation的依赖对象

    1.当某个NSOperation对象依赖于其它NSOperation对象的完成时,就可以通过addDependency方法添加一个或者多个依赖的对象,只有所有依赖的对象都已经完成操作,当前NSOperation对象才会开始执行操作。另外,通过removeDependency方法来删除依赖对象。

    [operation2 addDependency:operation1];

    设置队列的最大并发操作数量

    // 每次只能执行两个操作

    queue.maxConcurrentOperationCount = 2;

    取消Operations

    // 取消单个操作

    [operation cancel];

    // 取消queue中所有的操作

    [queue cancelAllOperations];

    等待Options完成

    // 会阻塞当前线程,等到某个operation执行完毕

    [operation waitUntilFinished];

    // 阻塞当前线程,等待queue的所有操作执行完毕

    [queue waitUntilAllOperationsAreFinished];

    暂停和继续queue

    // 暂停queue

    [queue setSuspended:YES];

    // 继续queue

    [queue setSuspended:NO];

    相关文章

      网友评论

          本文标题:多线程编程 - NSOperationQueue

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