iOS开发

多线程 -- NSOperation

2016-03-01  本文已影响39人  嘻嘻zhy

介绍

多线程是为了不影响UI响应

封装后可以避免重复代码

NSOperationQueue:封装线程管理部分
NSOperation:封装任务部分

NSOperation抽象基类

提供了接口。

NSInvocationOperation

创建

- (void)viewDidLoad {
    [super viewDidLoad];
    NSOperation *no = [[NSInvocationOperation alloc]  initWithTarget:self selector:@selector(say1) object:nil];
    [no start];
}
- (void) say1{
    for (int i=0; i<10; i++) {
        NSLog(@"%d",i);
    }
}

NSBlockOperation

创建
blockOperationWithBlock

NSOperation *bo = [NSBlockOperation blockOperationWithBlock:^{
        for (int i=0; i<10; i++) {
            NSLog(@"%d",i);
        }
    } ];

追加新的Block
addExecutionBlock

[bo addExecutionBlock:^{
        NSLog(@"addExe");
    }];

这里需要注意一点,block本来是储存在栈上的,在加入NSBlockOperation后会对block进行copy,使它们存放在堆上。这时候再对原有的block进行修改也不会有影响。

   void (^xixi)(void) = ^(){
        NSLog(@"first");
    };
    NSBlockOperation *bo = [NSBlockOperation blockOperationWithBlock:xixi];
    xixi = ^(){
        NSLog(@"second");
    };
    [bo addExecutionBlock:xixi];
    
    [bo start];

NSOperation依赖关系

addDependency:dep
dep结束后 才执行
注意不要循环依赖

NSOperation 状态

.name
.ready
.asynchronous
setCompletionBlock
执行后置为nil

NSOperationQueue

Queue operations
alloc init 或者 new 创建

如果Dep所在队列堵塞,本身所在的queue也会堵塞。
最安全是dep都在一个queue里。

mainQueue

上一篇下一篇

猜你喜欢

热点阅读