zoukankan      html  css  js  c++  java
  • gcd多线程

    http://www.cocoachina.com/ios/20140520/8485.html

        //GCD Grand宏大的 Central中央 Dispatch调度
        //是处理多线程的,类似于NSThread,但是比NSThread强大很多
        
        //创建一个串行调度队列(这种方式不推荐使用,一般都是去获取而不是创建)
        //第一个执行完之后才会执行下一个,如果第一个耗时较长,那么下一个需要等待
        //第一个参数:唯一的一个标示符,是c的字符串
        //第二个参数:是对这个队列的描述,直接写NULL
        dispatch_queue_t queue = dispatch_queue_create("com.zhiyou100.gcdtest1", NULL);
        //同步执行,会处于等待状态,可能会卡死主线程
        dispatch_sync(queue, ^{
            //同步执行是在主线程中进行的
    //        NSLog(@"-----%d----", [NSThread isMainThread]);
            
        });
        //异步执行,立即返回,不会对主线程有影响
        dispatch_async(queue, ^{
            //NSLog(@"----2-----");
            //[NSThread sleepForTimeInterval:5];
            //NSLog(@"----3-----");
        });
        
        dispatch_async(queue, ^{
            //[NSThread sleepForTimeInterval:5];
            //串行队列的异步执行是在分线程中执行的
            //NSLog(@"----%d-----", [NSThread isMainThread]);
        });
        dispatch_async(queue, ^{
            //[NSThread sleepForTimeInterval:3];
            //NSLog(@"----2-----");
        });
        dispatch_async(queue, ^{
            //[NSThread sleepForTimeInterval:1];
            //NSLog(@"----3-----");
        });
        
        
        //* 获得一个并行队列
        //第一个参数:优先级,选默认即可
        //第二个参数:标记,写0即可
        dispatch_queue_t queue2 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_async(queue2, ^{
            //[NSThread sleepForTimeInterval:1];
            //在分线程中完成,如果有大量数据需要下载,可以放在此处
            //NSLog(@"----%d-----", [NSThread isMainThread]);
        });
        dispatch_async(queue2, ^{
            //[NSThread sleepForTimeInterval:2];
            //NSLog(@"----2-----");
        });
        dispatch_async(queue2, ^{
            //[NSThread sleepForTimeInterval:3];
            //NSLog(@"----3-----");
        });
        
        
        //* 获取主线程队列
        dispatch_queue_t queue3 = dispatch_get_main_queue();
        dispatch_async(queue3, ^{
            //主线程中执行,如果有刷新UI的操作,写在此处
            NSLog(@"----%d-----", [NSThread isMainThread]);
        });
        dispatch_async(queue3, ^{             
            NSLog(@"----2-----");
        });
        dispatch_async(queue3, ^{
            NSLog(@"----3-----");
        });
        
        
        //下载并刷新UI
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            
            NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://d.hiphotos.baidu.com/image/w%3D2048/sign=70b811bda41ea8d38a227304a332314e/1ad5ad6eddc451dac289aaedb4fd5266d01632bc.jpg"]];
            
            UIImage *image = [UIImage imageWithData:data];
            
            dispatch_async(dispatch_get_main_queue(), ^{
                self.imageView.image = image;
            });
            
        });
        
  • 相关阅读:
    经验:Library Cache Lock之异常分析-云和恩墨技术通讯精选
    Schnorr 签名算法与聚合签名
    5G 第五代移动通信网络
    《机器学习》周志华西瓜书习题参考答案:第9章
    启动tomcat,在黑色窗口中看到乱码
    Linux系统目录结构以及简单说明
    Linux系统目录结构以及简单说明
    锤子科技官网:问题整理及注意事项
    锤子科技官网:问题整理及注意事项
    锤子科技官网:问题整理及注意事项
  • 原文地址:https://www.cnblogs.com/keyan1102/p/4463231.html
Copyright © 2011-2022 走看看