NSOperation

2018-08-21  本文已影响0人  Jason_a104

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:^{

    }];

上一篇下一篇

猜你喜欢

热点阅读