NSOperation、NSOperationQueue的学习

2017-11-09  本文已影响15人  慕言的世界

虽然一直说多线程,但是因为实际项目中几乎用不到自己开辟新的线程所以只有一点了解而已,现在公司没事就来学习学习。写下这篇文章只是作为自己以后的方便查阅,别无他意。

NSOperation

NSOperration只是iOS中一个抽象的类不能封装任务。但是它有俩字子类分别是NSInvocationOperation NSBlockOperation 其实它俩只是Block与Target的区别。

NSInvocationOperation 用法

    NSInvocationOperation *Operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test) object:nil];
    [Operation start];//需要手动启动任务

NSBlockOperation 用法

   NSBlockOperation *operation=[NSBlockOperation blockOperationWithBlock:^{
             
         }];
    
     //添加操作
    [operation addExecutionBlock:^{
    
    }];
    [operation start];//需要手动启动任务

以上默认都是在主线程操作的。如果想开辟新的线程则需加入队列

NSOperationQueue

添加操作到NSOperationQueue中,自动执行操作,自动开启线程

    NSOperationQueue *Queue = [[NSOperationQueue alloc]init];
    //添加到这种队列中的任务(NSOperation),就会自动放到子线程中执行
    NSOperationQueue *mainqueue = [NSOperationQueue mainQueue];
    //凡是添加到主队列中的任务(NSOperation),都会放到主线程中执行
//俩个都是添加到队列  区别还是。target、block的区别
- (void)addOperation:(NSOperation *)op;
- (void)addOperationWithBlock:(void (^)(void))block 

//添加依赖操作
- (void)addDependency:(NSOperation *)op;
   // 让Op2依赖于 op1,则先执行op1,在执行Op2
    [Op2 addDependency:op1]; 
//删除依赖操作
- (void)removeDependency:(NSOperation *)op;

//默认是-1 表示不进行限制,并发 。为1时,进行串行执行
@property NSInteger maxConcurrentOperationCount;
//取消全部队列
- (void)cancelAllOperations;
//等待别的队列结束
- (void)waitUntilAllOperationsAreFinished;
上一篇下一篇

猜你喜欢

热点阅读