zoukankan      html  css  js  c++  java
  • IOS

    1-NSOperation的作用

    NSOperation类本身并不能实现什么,但是可以配合两个子类NSInvocationOperation、NSBlockOperation和NSOperationQueue实现多线程。
    注意点:
    1.如果NSInvocationOperation和NSBlockOperation两个子类不配合NSOperationQueue队列使用,会默认让在主线程中同步执行。
    2.只有NSOperation添加到NSOperationQueue中才会开启新线程异步操作。
    3.NSOperation添加到NSOperationQueue队列后,会自动执行操作,自动开启线程。
    (1)NSOperation不添加到队列中,在主线程中执行,以NSInvocationOperation 为例,NSBlockOperation同理 :

    // 创建一个任务
    NSInvocationOperation *operation=[[NSInvocationOperation alloc]initWithTarget:self 
    selector:@selector(operation) 
    object:nil];
    // 执行操作
    [operation start];

    (2)添加到队列中执行

    NSInvocationOperation *A=[[NSInvocationOperation alloc]initWithTarget:self 
    selector:@selector(operation) 
    object:nil];
    NSBlockOperation *B=[NSBlockOperation blockOperationWithBlock:^{
       NSLog(@"B%@",[NSThread currentThread] );
     }];
     NSOperationQueue *queue=[[NSOperationQueue alloc] init];
     [queue addOperation:A];
     [queue addOperation:B];
     // 直接添加block
     [queue addOperationWithBlock:^{
      NSLog(@"addOperationWithBlock执行中。。。%@",
      [NSThread currentThread] );
        }];

    2-NSOperation其他用法

    (1)队列可以暂停操作,需要开始的时候再开始就好
    [queue setSuspended:YES];
    (2)队列可以把任务全部取消
    [queue cancelAllOperations];
    (3)NSOperation依赖
    现在有三个任务A、B、C,然后添加到队列queue中,如果想要按照一定顺序执行这三个任务,比如A ,B,C顺序执行,只要添加两个依赖关系就可以
    [B addDependency:A];
    [C addDependency:B];
    (4)NSOperation获取主线程,这样任务都在主线程中执行
    NSOperationQueue *mainQueue=[NSOperationQueue mainQueue];
    (5)NSOperation有一个maxConcurrentOperationCount属性,设置值代表最大开启线程数。
    (6)NSoperation的线程通信 举一个回到主线程的例子

    // Nsoperation的线程通信
        [queue addOperationWithBlock:^{
            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                //...
            }];
        }];

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    开源Jabber(XMPP) IM服务器介绍
    ejabberd、jabber、jabberd、xmpp辨析
    分布式与集群的区别
    浅谈Javascript事件模拟
    理清javascript的相关概念 DOM和BOM
    js基础学习第一天(关于DOM和BOM)一
    处理机调度和死锁
    C++11 之 " = delete "
    小数的二进制表示
    二进制数的插入
  • 原文地址:https://www.cnblogs.com/yuqingzhude/p/4836508.html
Copyright © 2011-2022 走看看