NSOperation 和 GCD

GCD:仅仅支持先进先出原则(FIFO),不支持线程之间的依赖关系,但是GCD更接近底层执行效率更高。

NSOperationQueue: 支持优先级,线程之间的依赖关系。而NSOperation是基于GCD

GCD:

        //后台执行的线程
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            NSLog(@"这里是后台执行");
        });
        //主线程执行
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"这里是主线程执行");
        });
        //一次性执行的
        static dispatch_once_t onceThread;
        dispatch_once(&onceThread,^{
            NSLog(@"一次性线程");
        });
        //延时2秒执行
        double setTime = 2.0;//设置的时间
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, setTime*NSEC_PER_SEC);//设置延时
        dispatch_after(popTime, dispatch_get_main_queue(), ^{
            NSLog(@"延时两秒后执行");
        });
        //GCD让后天两个线程并行执行,然后等待两个线程都结束后再汇总执行结果
        dispatch_group_t group = dispatch_group_create();//创建一个组
        dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
            NSLog(@"第一个线程执行的结果");
        });
        dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
            NSLog(@"第二个线程执行结果");
        });
        dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{
            NSLog(@"这是汇总过后的结果");
        });

NSOperation:

//创建队列
    NSOperationQueue *queue = [[NSOperationQueue alloc]init];
    //获得主队列
    NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
    //创建下载小说的操作
    NSBlockOperation *downLoadOperation = [NSBlockOperation blockOperationWithBlock:^{
        //
        NSLog(@"下载小说%@",[NSThread currentThread]);
    }];
    //创建下载小说的操作
    NSBlockOperation *openLoadOperation = [NSBlockOperation blockOperationWithBlock:^{
        //
        NSLog(@"解压小说%@",[NSThread currentThread]);
    }];
    //创建下载小说的操作
    NSBlockOperation *uiLoadOperation = [NSBlockOperation blockOperationWithBlock:^{
        //
        NSLog(@"跟新UI%@",[NSThread currentThread]);
    }];
    //设置依赖关系
    [openLoadOperation addDependency:downLoadOperation];
    //添加下载和解压操作
    [queue addOperations:@[downLoadOperation,openLoadOperation] waitUntilFinished:YES];
    //主队列跟新ui
    [mainQueue addOperation:uiLoadOperation];

可能是用的比较少的原因。所以理解的也不是很透彻。

你可能感兴趣的:(object-c线程)