美文网首页
iOS开发多线程篇--NSOperation与Queue

iOS开发多线程篇--NSOperation与Queue

作者: peal | 来源:发表于2016-03-14 20:23 被阅读417次

    目录:

    一 NSOperation简介及优势
    二 实现多线程的关键步骤
    三 NSOperation子类的使用
     1 NSInvocationOperation
     2 NSBlockOperation
     3 自定义子类继承NSOperation,实现内部相应的⽅法 重写main方法 
    
    一 NSOperation简介及优势

    在GCD 的基础上进行的封装,不用考虑内存, 系统解决 开几个线程 ,使用起来非常方便。

    二 实现多线程的关键步骤

    把主线程不想干的事情放到 NSOperation 中
    把NSOperation对象 放到NSOperationQueue中

    三 NSOperation子类的使用

    NSOperation是个抽象类,并不具备封装操作的能力,必须使⽤它的子类
    1 NSInvocationOperation

       //   1 分线程需要做的任务  
    NSInvocationOperation *operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(downloadImage) object:nil];
    
      //   2   将 operation加到 NSOperationQueue
    
    NSOperationQueue *queue = [[NSOperationQueue alloc]init];
    [queue addOperation:operation];
    

    2 NSBlockOperation
    ```
    创建并启动一个分线程
    /**

    *开启分线程的第一种方式

    */

    NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
        
        NSLog(@"下载图片%@",[NSThread currentThread]);
        
        
    }];
    

    /**
    *
    *开启分线程的第二种方式 operation对象调用 addExecutionBlock 开启分线程
    *
    */

    [operation addExecutionBlock:^{
        
         NSLog(@"---下载音乐---%@",[NSThread currentThread]);
        
        
        
    }];
    

    /**
    *
    *开启分线程的第三种方式 queue对象 直接addOperationWithBlock
    *
    */

    [queueu addOperationWithBlock:^{
        NSLog(@"---下载小说---%@",[NSThread currentThread]);
        
        
    }];
    
     现在需要 让queue 串行
    

    // 添加依赖 防止互相依赖 造成死锁 3》1 1》3
    // 2 3 1

    [operationImage addDependency:operationMovei];
    [operationMovei addDependency:operationMusic];
    

    // 取消所有的操作事务
    [queue cancelAllOperations];
    // 暂停 开始 性能优化 定期清理缓存 多线程编程 scrollview tablview
    queue.suspended = YES;
    queue.suspended = NO;

    //盲听 监听

    [operationMovei setCompletionBlock:^{

        NSLog(@"图片下完了%@",[NSThread currentThread]);
        
    }];

    相关文章

      网友评论

          本文标题:iOS开发多线程篇--NSOperation与Queue

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