iOS 控制任务执行顺序

本文介绍了在iOS开发中如何保证两个任务在子线程中按顺序执行,提供了GCD串行队列、GCD的barrier、NSOperation以及设置NSOperationQueue的maxConcurrentOperationCount为1等四种实现方式,并通过实例分析了它们的执行特点和效果。
摘要由CSDN通过智能技术生成
  1. 需求:
    有两个任务都要放在子线程中执行, 且要保证A执行完再执行B.
    如果你也有同样的需求, 可以从下面几种方法中挑选一种

  1. 实现方法
    1.1. 方法一 使用GCD串行队列. 先创建一个串行队列, 将任务加入到串行队列中, 因为是串行队列,能保证顺序执行, 且因为是串行队列,所以两个任务是在同一线程执行.
   dispatch_queue_t queue = dispatch_queue_create("myCostom", DISPATCH_QUEUE_SERIAL);
    NSLog(@"dispatch111 start");
    dispatch_async(queue, ^{
        NSLog(@"sleep1111");
        NSLog(@"dispatch111 %@", [NSThread currentThread]);
        [NSThread sleepForTimeInterval:5];
        NSLog(@"awake up111");
    });

    NSLog(@"dispatch2222 start");
    dispatch_async(queue, ^{
        NSLog(@"sleep 2222");
        NSLog(@"dispatch2222 %@", [NSThread currentThread]);
        [NSThread sleepForTimeInterval:5];
        NSLog(@"awake up222222");
    });
    NSLog(@"dispatch 33333");

1.2 方法二 使用barrier.

   dispatch_queue_t queue = dispatch_queue_create("mycustom", DISPATCH_QUEUE_CONCURRENT);
    NSLog(@"dispatch111 start");
    dispatch_async(queue, ^{
        NSLog(@"sleep1111");
        NSLog(@"dispatch111 %@", [NSThread currentThread]);
        [NSThread sleepForTimeInterval:5];
        NSLog(@"awake up111");
    });
    dispatch_barrier_async(queue, ^{
        NSLog
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值