IOS多线程相关:GCD及NSOperation的使用

1 篇文章 0 订阅
1 篇文章 0 订阅

1、多线程应用场景:主要将一些比较耗时的操作放到子线程中来做,防止在主线程中出现错做的卡顿状态;

2、常用的方法:实现多线程的方法有很多,如pthread/NSThread/GCD/NSOperation,比较常用的主要有GCD和NSOperation;  


以下分解介绍GCD和NSOperation(放入下一篇)的使用方法:

GCD:

概念

1.同步任务:需要顺序执行的任务;  只能在当前线程中执行,不能开启新线程

   异步任务:可以同时执行的任务;  在新线程中执行,会开启新线程;

2.并发队列:可以让多个任务同时执行;

  串行队列: 一个任务执行完再执行下一个任务;

不同队列和任务类型对应的执行方式如下表:



代码示例:

开启任务的形式:

异步任务:dispatch_async(dispatch_queue_t queue, dispatch_block_t block);

同步任务:dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);


开启队列的多种形式:

串行队列:dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL)

并行队列:dispatch_queue_create(NULL, DISPATCH_QUEUE_CONCURRENT)

主队列:dispatch_get_main_queue(void),只能在主线程中执行

全局队列(并行队列):dispatch_get_global_queue(long identifier, unsigned long flags);


1、同步任务+串行队列

-(void)syncSerial

{

    // 串行队列

    dispatch_queue_t queue = dispatch_queue_create(DISPATCH_CURRENT_QUEUE_LABEL, DISPATCH_QUEUE_SERIAL);

    // 同步任务

    dispatch_sync(queue, ^{

        NSLog(@"任务1%@",[NSThread currentThread]);

    });

    

    dispatch_sync(queue, ^{

        NSLog(@"任务2%@",[NSThread currentThread]);

    });

    

    dispatch_sync(queue, ^{

        NSLog(@"任务3%@",[NSThread currentThread]);

    });

    

    

}


2、同步任务+并发队列

-(void)syncConcurrent

{

    // 并行队列

    dispatch_queue_t queue = dispatch_queue_create(NULL, DISPATCH_QUEUE_CONCURRENT);

    // 同步任务

    dispatch_sync(queue, ^{

        NSLog(@"任务1%@",[NSThread currentThread]);

    });

    

    dispatch_sync(queue, ^{

        NSLog(@"任务2%@",[NSThread currentThread]);

    });

    

    dispatch_sync(queue, ^{

        NSLog(@"任务3%@",[NSThread currentThread]);

    });

}


3、异步任务+串行队列

-(void)asyncSerial

{

    // 串行队列

    dispatch_queue_t queue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL);

    // 异步任务

    dispatch_async(queue, ^{

        NSLog(@"任务1%@",[NSThread currentThread]);

    });

    

    dispatch_async(queue, ^{

        NSLog(@"任务2%@",[NSThread currentThread]);

    });

    

    dispatch_async(queue, ^{

        NSLog(@"任务3%@",[NSThread currentThread]);

    });

}


4、异步任务+并行队列

-(void)asyncConcurrent

{

    // 串行队列

    dispatch_queue_t queue = dispatch_queue_create(NULL, DISPATCH_QUEUE_CONCURRENT);

    // 异步任务

    dispatch_async(queue, ^{

        NSLog(@"任务1%@",[NSThread currentThread]);

    });

    

    dispatch_async(queue, ^{

        NSLog(@"任务2%@",[NSThread currentThread]);

    });

    

    dispatch_async(queue, ^{

        NSLog(@"任务3%@",[NSThread currentThread]);

    });

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值