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;
            });
            
        });
        
  • 相关阅读:
    数据倾斜原理及解决方案
    删除emp_no重复的记录,只保留最小的id对应的记录
    理解HBase面向列存储
    给数据库用户授权(对象多为系统表,如dba可以查看的表)
    SpringBoot里的一些注解
    01背包
    【转】简说GNU, GCC and MinGW (Lu Hongling)
    费马小定理
    欧拉定理
    【转】C中的静态存储区和动态存储区
  • 原文地址:https://www.cnblogs.com/keyan1102/p/4463231.html
Copyright © 2011-2022 走看看