码迷,mamicode.com
首页 > 编程语言 > 详细

接上 主线程和分线程的另一种方法GCD

时间:2015-09-28 22:24:41      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

//

//  ViewController.m

//  GCD

//

//  Created by mac on 15-9-28.

//  Copyright (c) 2015年 zy. All rights reserved.

//

 

#import "ViewController.h"

 

@interface ViewController ()

 

@end

 

@implementation ViewController

 

- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib

//    Gcd grand central dispatch

//    dispath_queue_t  类似于操作队列

//    可以在使用GCD创建串行队列,创建并行队列

#pragma mark-----串行队列------

//    参数一:队列标示符

//    参数二:表示队列类型,串行还是并行

//    DISPATCH_QUEUE_SERIAL 串行队列

//    DISPATCH_QUEUE_CONCURRENT 并行队列

    

  /*  dispatch_queue_t queue=dispatch_queue_create("queue1", DISPATCH_QUEUE_SERIAL);

    //    可以在队列中添加同步内容和异步内容

//    sync 同步      async异步

    dispatch_sync(queue, ^{

       

        NSLog(@"任务一开始任务");

        [NSThread sleepForTimeInterval:2];

        NSLog(@"任务一 ------%d",[NSThread isMainThread]);

    });

    dispatch_sync(queue, ^{

        NSLog(@"任务二开始任务");

        [NSThread sleepForTimeInterval:2];

        NSLog(@"任务二 ------%d",[NSThread isMainThread]);

    });

    

    dispatch_async(queue, ^{

        NSLog(@"任务三开始任务");

        [NSThread sleepForTimeInterval:2];

        NSLog(@"任务三------%d",[NSThread isMainThread]);

    });

    

    dispatch_async(queue, ^{

        NSLog(@"任务四开始任务");

        [NSThread sleepForTimeInterval:2];

        NSLog(@"任务四------%d",[NSThread isMainThread]);

    });

//    串行队列是可以暂停的

    dispatch_suspend(queue);

//    队列继续

    dispatch_resume(queue);

//    使用串行队列,任务需要等待的,必须等到上一个任务结束之后,才能执行下一个任务

//    同步任务是在主线程中执行的,异步任务是在分线程中执行的*/

#pragma mark - --并行队列-----

//    dispatch_get_global_queue  可以获取到系统提供的并行队列

//    参数一:队列优先级 HIGH > DEFAULT > LOW >BACKGROUND

//    参数二:系统预留字段

  dispatch_queue_t queue=  dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

//    同步任务

    dispatch_sync(queue, ^{

        

        NSLog(@"任务一开始执行");

        [NSThread sleepForTimeInterval:2];

        NSLog(@"任务一完成%d",[NSThread isMainThread]);

    });

    dispatch_sync(queue, ^{

        

        NSLog(@"任务二开始执行");

        [NSThread sleepForTimeInterval:2];

        NSLog(@"任务二完成%d",[NSThread isMainThread]);

    });

    dispatch_async(queue, ^{

       

        NSLog(@"任务三开始执行");

        [NSThread sleepForTimeInterval:2];

        NSLog(@"任务三完成%d",[NSThread isMainThread]);

    });

    dispatch_async(queue, ^{

        

        NSLog(@"任务四开始执行");

        [NSThread sleepForTimeInterval:2];

        NSLog(@"任务四完成%d",[NSThread isMainThread]);

    });

//    并行队列中, 如果任务是同步任务,任务也是需要等待的,此时任务是在主线程中执行的

//    如果任务是异步任务,任务不需等待,可以并发执行,此时任务是在分线程中执行的

//    并行队列是不可以暂停的

    

    

    

#pragma mark----主线程队列------

    dispatch_queue_t mainQueue = dispatch_get_main_queue();

    dispatch_async(mainQueue, ^{

        

        NSLog(@"任务五开始执行");

        [NSThread sleepForTimeInterval:2];

        NSLog(@"任务五完成%d",[NSThread isMainThread]);

    });

//    一般向主线程中队列中添加任务时,添加异步任务

//    主线程队列是不可以暂停的

//    主线程刷新UI

}

 

- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

@end

接上 主线程和分线程的另一种方法GCD

标签:

原文地址:http://www.cnblogs.com/wangzhen-Me/p/4844911.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!