iOS 多线程编程<二、GCD基本用法>

一:在学习多线程之前首先区分几个容易混淆的概念


二:GCD的基本用法

//
//  ViewController.m
//  GCD
//
//  Created by fe on 16/9/30.
//  Copyright © 2016年 fe. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [self syncFIFOQueue];
}
//异步函数+并发队列 总结:会开辟线程,任务并发执行
- (void)asyncGlobalQueue
{
    /*第一种创建并发队列方法
     *第一个参数:C语言的字符串,用来表示队列名
     *第二个参数:队列属性 DISPATCH_QUEUE_SERIAL(串行队列)
     *                 DISPATCH_QUEUE_CONCURRENT(并发队列)
     */
    dispatch_queue_t queue = dispatch_queue_create("异步函数+并发队列", DISPATCH_QUEUE_CONCURRENT);
    /*
     *第二种创建并发队列的方法
     *第一个参数:队列优先级,
     *第二个参数:预留参数,永远填0
     */
    //dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    /*创建异步函数
     *第一个参数:队列
     *第二个参数:block,在里面封装任务
     */
    dispatch_async(queue, ^{
        NSLog(@"----Task1----%@",[NSThread currentThread]);
    });
    dispatch_async(queue, ^{
        NSLog(@"----Task2----%@",[NSThread currentThread]);
    });
    dispatch_async(queue, ^{
        NSLog(@"----Task3----%@",[NSThread currentThread]);
    });
    dispatch_async(queue, ^{
        NSLog(@"----Task4----%@",[NSThread currentThread]);
    });
}
//异步函数+串行队列 总结:会开辟线程,任务FIFO执行
- (void)asyncFIFOQueue
{
    /*
     *第一个参数:C语言的字符串,用来表示队列名
     *第二个参数:队列属性 DISPATCH_QUEUE_SERIAL(串行队列)
     *                 DISPATCH_QUEUE_CONCURRENT(并发队列)
     */
    dispatch_queue_t queue = dispatch_queue_create("异步函数+串行队列", DISPATCH_QUEUE_SERIAL);
    /*创建异步函数
     *第一个参数:队列
     *第二个参数:block,在里面封装任务
     */
    dispatch_async(queue, ^{
        NSLog(@"----Task1----%@",[NSThread currentThread]);
    });
    dispatch_async(queue, ^{
        NSLog(@"----Task2----%@",[NSThread currentThread]);
    });
    dispatch_async(queue, ^{
        NSLog(@"----Task3----%@",[NSThread currentThread]);
    });
    dispatch_async(queue, ^{
        NSLog(@"----Task4----%@",[NSThread currentThread]);
    });
 
}
//同步函数+并发队列 总结:不会开辟新线程,任务FIFO执行
- (void)syncGlobalQueue
{
    /*
     *第一个参数:C语言的字符串,用来表示队列名
     *第二个参数:队列属性 DISPATCH_QUEUE_SERIAL(串行队列)
     *                 DISPATCH_QUEUE_CONCURRENT(并发队列)
     */
    dispatch_queue_t queue = dispatch_queue_create("同步函数+并发队列", DISPATCH_QUEUE_CONCURRENT);
    /*创建同步函数
     *第一个参数:队列
     *第二个参数:block,在里面封装任务
     */
    dispatch_sync(queue, ^{
        NSLog(@"----Task1----%@",[NSThread currentThread]);
    });
    dispatch_sync(queue, ^{
        NSLog(@"----Task2----%@",[NSThread currentThread]);
    });
    dispatch_sync(queue, ^{
        NSLog(@"----Task3----%@",[NSThread currentThread]);
    });
    dispatch_sync(queue, ^{
        NSLog(@"----Task4----%@",[NSThread currentThread]);
    });
}
//同步函数+串行队列 总结:不会开辟新线程,任务FIFO执行
- (void)syncFIFOQueue
{
    /*
     *第一个参数:C语言的字符串,用来表示队列名
     *第二个参数:队列属性 DISPATCH_QUEUE_SERIAL(串行队列)
     *                 DISPATCH_QUEUE_CONCURRENT(并发队列)
     */
    dispatch_queue_t queue = dispatch_queue_create("同步函数+串行队列", DISPATCH_QUEUE_SERIAL);
    /*创建同步函数
     *第一个参数:队列
     *第二个参数:block,在里面封装任务
     */
    dispatch_sync(queue, ^{
        NSLog(@"----Task1----%@",[NSThread currentThread]);
    });
    dispatch_sync(queue, ^{
        NSLog(@"----Task2----%@",[NSThread currentThread]);
    });
    dispatch_sync(queue, ^{
        NSLog(@"----Task3----%@",[NSThread currentThread]);
    });
    dispatch_sync(queue, ^{
        NSLog(@"----Task4----%@",[NSThread currentThread]);
    });
}

@end


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值