美文网首页
NSOperation

NSOperation

作者: Jason_a104 | 来源:发表于2018-08-21 10:55 被阅读0次

    NSOperation的子类

    NSInvocationOperation

    NSBlockOperation

    自定义子类继承NSOperation,实现内部相应的方法

    创建线程

    NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{

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

        }];

    启动线程

    [op1 start];

    追加任务

    如果一个操作中的任务数量大于1,那么可能会开子线程并发执行任务(可能在主线程中执行,也可能在子线程中执行)

    [op1 addExecutionBlock:^{

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

        }];

     NSOperation队列

    [NSOperationQueue mainQueue];//创建主队列

        NSOperationQueue *opQueue = [[NSOperationQueue alloc] init];//创建非主队列(同时具备串行和并行的功能)

    添加到队列中

        [opQueue addOperation:op1];

        [op Queue addOperationWithBlock:^{

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

        }];

    控制最大并发数(同一时间最多多少任务可以执行,如果设置是1,则是串行队列,如果 > 1,则是并行队列,如果 = -1,则表示不受限制)

      串行执行任务!= 1条线程

        opQueue.maxConcurrentOperationCount = 5;

     暂停(不能暂停正在处于执行状态的任务)

         队列中任务的状态:已经执行完毕 | 正在执行 | 排队等待状态

        [opQueue setSuspended:YES];

     继续

        [opQueue setSuspended:NO];

       取消(不能取消正在处于执行状态的任务)

        [opQueue cancelAllOperations];

    添加依赖,注意不能循环依赖(先执行任务2再执行任务1)

        [op1 addDependency:op2];

        添加监听(任务执行完毕会调用)

        op2.completionBlock = ^{

            NSLog(@"op2执行完毕了");

        };

     NSOperation实现线程间通信

        [[NSOperationQueue mainQueue] addOperationWithBlock:^{

        }];

    相关文章

      网友评论

          本文标题:NSOperation

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