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

来源:互联网 发布:python 日志时间格式 编辑:程序博客网 时间:2024/06/05 17:49

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


二: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
原创粉丝点击