iOS--多线程-GCD

作者: STONEsh | 来源:发表于2016-02-28 15:38 被阅读42次

    ViewController.m#

    //
    //  ViewController.m
    //  多线程-GCD
    //
    //
    
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
    //======================== GCD ===========================
    //子线程
        
        dispatch_queue_t queue = dispatch_queue_create("test", NULL);
        
        dispatch_async(queue, ^{//子线程调用的Block
            for (int i = 0; i < 50; i ++) {
                NSLog(@"子线程:%d", i);
            }
          //返回主线程执行,主线程调用此Block
            dispatch_sync(dispatch_get_main_queue(), ^{//主线程调用的Block
                
                if ([NSThread isMainThread]) {
                    NSLog(@"是主线程");
                }
            });
            
            
            
        });
        
        
        
        
        
        
    //主线程:
        
        for (int i = 0; i < 50; i ++) {
            NSLog(@"主线程:%d", i);
        }
        
        
        
    }
    
    
    /*
     //
     /////dispatch_sync(),同步添加操作。他是等待添加进队列里面的操作完成之后再继续执行。
     
     dispatch_queue_t concurrentQueue = dispatch_queue_create("my.concurrent.queue", DISPATCH_QUEUE_CONCURRENT);
     NSLog(@"1");
     dispatch_sync(concurrentQueue, ^(){
     NSLog(@"2");
     [NSThread sleepForTimeInterval:10];
     NSLog(@"3");
     });
     NSLog(@"4");
     输出 :
     
     11:36:25.313 GCDSeTest[544:303] 1
     11:36:25.313 GCDSeTest[544:303] 2
     11:36:30.313 GCDSeTest[544:303] 3//模拟长时间操作
     11:36:30.314 GCDSeTest[544:303] 4
     
     //
     /////dispatch_async ,异步添加进任务队列,它不会做任何等待
     
     dispatch_queue_t concurrentQueue = dispatch_queue_create("my.concurrent.queue", DISPATCH_QUEUE_CONCURRENT);
     NSLog(@"1");
     dispatch_async(concurrentQueue, ^(){
     NSLog(@"2");
     [NSThread sleepForTimeInterval:5];
     NSLog(@"3");
     });
     NSLog(@"4");
     输出:
     11:42:43.820 GCDSeTest[568:303] 1
     11:42:43.820 GCDSeTest[568:303] 4
     11:42:43.820 GCDSeTest[568:1003] 2
     11:42:48.821 GCDSeTest[568:1003] 3//模拟长时间操作时间
     */
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end
    
    

    相关文章

      网友评论

        本文标题:iOS--多线程-GCD

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