美文网首页
IOS 关于多线程开发

IOS 关于多线程开发

作者: croire_cfg | 来源:发表于2017-06-15 19:38 被阅读0次

    一:多线程间通信

    多线程之间的通信可以体现在线程间数据的传递,或者是在某一个线程中完成操作之后转移到另一个线程继续操作

    就IOS来说,最方便也最简洁的多线程方案当属GCD,其代码块简洁,可读性强,并且同样功能强大。我们可以通过

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0){

    });

    方法操作一个多线程,比如在此方法中下载一张图片,我们知道在子线程中获取图片之后需要返回主线程中刷新UI,这个时候就可以利用在子线程中获得的Image,给主线程的控件设置图片;

    dispatch_async(dispatch_get_main_queue(), ^{[

        [self.button setImage:image forState:UIControlStateNormal];  

     }):

    二、多个线程控制

    有的我们会遇到需要同时开辟多个线程完成工作,并且还需要监控到所有线程在什么时候都完成工作。

    比如:当我们需要用三个线程去同时请求数据,当二个线程AB都请求到数据后,再到其他线程来操作数据。这个时候我就必须知道什么时候三个数据全部都拿到了,我们才能继续下一步的操作。

    应对这种情况我们可以使用dispatch_group来控制。

    dispatch_group_t group = dispatch_group_create();

    dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{

    // 并行执行的线程A

    });

    dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{

    // 并行执行的线程B

    });

    dispatch_group_notify(group, dispatch_get_global_queue(0,0), ^{

    // 汇总结果

    });

    我们也可以通过用NSOpertion和NSOpertionQueue来处理这个问题

    // 创建队列

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

    // 创建3个操作

    NSOperation *a = [NSBlockOperation blockOperationWithBlock:^{

    NSLog(@”operationA---“);

    }];

    NSOperation *b = [NSBlockOperation blockOperationWithBlock:^{

    NSLog(@”operationB---“);

    }];

    NSOperation *c = [NSBlockOperation blockOperationWithBlock:^{

    NSLog(@”operationC---“);

    }];

    // 添加依赖

    [c addDependency:a];

    c在a執行完之後再執行

    [c addDependency:b];

    // 执行操作

    [queue addOperation:a];

    [queue addOperation:b];

    [queue addOperation:c];

    相关文章

      网友评论

          本文标题:IOS 关于多线程开发

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