美文网首页
iOS开发多线程篇—GCD介绍(转)

iOS开发多线程篇—GCD介绍(转)

作者: b470b9fc7145 | 来源:发表于2017-02-27 22:28 被阅读17次

iOS开发多线程篇—GCD介绍

  • 用异步函数往并发队列中添加任务--同时开启三个子线程
//
//  YYViewController.m
//  08-GCD基本使用
//
//  Created by apple on 14-6-24.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"

@interface YYViewController ()

@end

@implementation YYViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    //1.获得全局的并发队列
   dispatch_queue_t queue =  dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    //2.添加任务到队列中,就可以执行任务
    //异步函数:具备开启新线程的能力
    dispatch_async(queue, ^{
        NSLog(@"下载图片1----%@",[NSThread currentThread]);
    });
    dispatch_async(queue, ^{
        NSLog(@"下载图片2----%@",[NSThread currentThread]);
    });
    dispatch_async(queue, ^{
        NSLog(@"下载图片2----%@",[NSThread currentThread]);
    });
//打印主线程
    NSLog(@"主线程----%@",[NSThread mainThread]);
    
}

@end
  • 用异步函数往串行队列中添加任务--会开启线程,但是只开启一个线程
//
//  YYViewController.m
//  09—GCD基本使用2
//
//  Created by apple on 14-6-24.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"

@interface YYViewController ()

@end

@implementation YYViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    //打印主线程
    NSLog(@"主线程----%@",[NSThread mainThread]);
    
    //创建串行队列
    dispatch_queue_t  queue= dispatch_queue_create("wendingding", NULL);
    //第一个参数为串行队列的名称,是c语言的字符串
    //第二个参数为队列的属性,一般来说串行队列不需要赋值任何属性,所以通常传空值(NULL)
    
    //2.添加任务到队列中执行
    dispatch_async(queue, ^{
        NSLog(@"下载图片1----%@",[NSThread currentThread]);
    });
    dispatch_async(queue, ^{
        NSLog(@"下载图片2----%@",[NSThread currentThread]);
    });
    dispatch_async(queue, ^{
        NSLog(@"下载图片2----%@",[NSThread currentThread]);
    });
    
    //3.释放资源
//    dispatch_release(queue);
}

@end

  • 用同步函数往并发队列中添加任务--不会开启新的线程,并发队列失去了并发的功能
//
//  YYViewController.m
//  10-CGD基本使用3
//
//  Created by apple on 14-6-24.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"

@interface YYViewController ()

@end

@implementation YYViewController
/**
 *  用同步函数往并发队列中添加任务
 */
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    //打印主线程
    NSLog(@"主线程----%@",[NSThread mainThread]);
    
    //创建串行队列
    dispatch_queue_t  queue= dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    
    //2.添加任务到队列中执行
    dispatch_sync(queue, ^{
        NSLog(@"下载图片1----%@",[NSThread currentThread]);
    });
    dispatch_sync(queue, ^{
        NSLog(@"下载图片2----%@",[NSThread currentThread]);
    });
    dispatch_sync(queue, ^{
        NSLog(@"下载图片3----%@",[NSThread currentThread]);
    });
}

@end
  • 用同步函数往串行队列中添加任务--不会开启新的线程
//
//  YYViewController.m
//  11—CGD基本使用4
//
//  Created by apple on 14-6-24.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"

@interface YYViewController ()

@end

@implementation YYViewController


/**
 *用同步函数往串行队列中添加任务
 */
- (void)viewDidLoad
{
    [super viewDidLoad];
     NSLog(@"用同步函数往串行队列中添加任务");
    //打印主线程
    NSLog(@"主线程----%@",[NSThread mainThread]);
    
    //创建串行队列
    dispatch_queue_t  queue= dispatch_queue_create("wendingding", NULL);
    
    //2.添加任务到队列中执行
    dispatch_sync(queue, ^{
        NSLog(@"下载图片1----%@",[NSThread currentThread]);
    });
    dispatch_sync(queue, ^{
        NSLog(@"下载图片2----%@",[NSThread currentThread]);
    });
    dispatch_sync(queue, ^{
        NSLog(@"下载图片3----%@",[NSThread currentThread]);
    });
}

@end

总结

同步函数

(1)并发队列:不会开线程
(2)串行队列:不会开线程

异步函数

(1)并发队列:能开启N条线程
(2)串行队列:开启1条线程

相关文章

  • iOS-多线程篇—GCD介绍

    iOS开发多线程篇—GCD介绍一、简单介绍1.什么是GCD?全称是Grand Central Dispatch,可...

  • iOS多线程开发—GCD(二)

    前言 在上一篇文章iOS多线程开发—GCD(二)中我介绍了什么是多线程,GCD与线程的关系,以及如何创建队列和简单...

  • 多线程之GCD用法

    iOS开发多线程之GCD介绍 一、简单介绍 1.什么是GCD? 全称是Grand Central Dispatch...

  • 关于GCD常用的方法

    iOS开发多线程篇—GCD的常见用法 一、延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)...

  • iOS开发多线程之GCD

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 GCD...

  • iOS开发多线程篇—GCD介绍(转)

    iOS开发多线程篇—GCD介绍 用异步函数往并发队列中添加任务--同时开启三个子线程 用异步函数往串行队列中添加任...

  • iOS开发之GCD并发队列

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 03 ...

  • iOS开发之GCD同步任务加强

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 004...

  • iOS开发之GCD串行队列

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 实例d...

  • iOS面试攻略,浅谈多线程开发2(GCD)

    之前写了一篇多线程开发的iOS 面试攻略,浅谈多线程开发1但是没有跟大家聊GCD 就是想把GCD单独放在一篇文章跟...

网友评论

      本文标题:iOS开发多线程篇—GCD介绍(转)

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