zoukankan      html  css  js  c++  java
  • IOS GCD03-其他用法

    #define global_queue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
    #define main_queue dispatch_get_main_queue()
    
    #import "HMViewController.h"
    
    @interface HMViewController ()
    @property (weak, nonatomic) IBOutlet UIImageView *imageView1;
    @property (weak, nonatomic) IBOutlet UIImageView *imageView2;
    @property (weak, nonatomic) IBOutlet UIImageView *bigImageView;
    @end
    
    @implementation HMViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        
        // 图片1: http://news.baidu.com/z/resource/r/image/2014-06-22/2a1009253cf9fc7c97893a4f0fe3a7b1.jpg
        // 图片2: http://news.baidu.com/z/resource/r/image/2014-06-22/b2a9cfc88b7a56cfa59b8d09208fa1fb.jpg
        /**
         1.下载图片1和图片2
         
         2.将图片1和图片2合并成一张图片后显示到imageView上
         
         思考:
         * 下载图片 : 子线程
         * 等2张图片都下载完毕后, 才回到主线程
         */
    }
    
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        // 创建一个组
        dispatch_group_t group = dispatch_group_create();
        
        // 开启一个任务下载图片1
        __block UIImage *image1 = nil;
        dispatch_group_async(group, global_queue, ^{
            image1 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/2a1009253cf9fc7c97893a4f0fe3a7b1.jpg"];
        });
        
        // 开启一个任务下载图片2
        __block UIImage *image2 = nil;
        dispatch_group_async(group, global_queue, ^{
            image2 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/b2a9cfc88b7a56cfa59b8d09208fa1fb.jpg"];
        });
        
        // 同时执行下载图片1下载图片2操作
        
        // 等group中的所有任务都执行完毕, 再回到主线程执行其他操作
        dispatch_group_notify(group, main_queue, ^{
            self.imageView1.image = image1;
            self.imageView2.image = image2;
            
            // 合并
            UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 100), NO, 0.0);
            [image1 drawInRect:CGRectMake(0, 0, 100, 100)];
            [image2 drawInRect:CGRectMake(100, 0, 100, 100)];
            self.bigImageView.image = UIGraphicsGetImageFromCurrentImageContext();
            // 关闭上下文
            UIGraphicsEndImageContext();
        });
    //    if (self.log == NO) {
    //        NSLog(@"-------touchesBegan");
    //        self.log = YES;
    //    }
    //    static dispatch_once_t onceToken;
    //    dispatch_once(&onceToken, ^{
    //        NSLog(@"-------touchesBegan");
    //    });
    }
    
    - (void)downlaod2image
    {
        dispatch_async(global_queue, ^{
            NSLog(@"下载图片---%@", [NSThread currentThread]);
            
            // 下载图片1
            UIImage *image1 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/2a1009253cf9fc7c97893a4f0fe3a7b1.jpg"];
            NSLog(@"下载完图片1---%@", [NSThread currentThread]);
            // 下载图片2
            UIImage *image2 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/2a1009253cf9fc7c97893a4f0fe3a7b1.jpg"];
            NSLog(@"下载完图片2---%@", [NSThread currentThread]);
            
            dispatch_async(main_queue, ^{
                NSLog(@"显示图片---%@", [NSThread currentThread]);
                
                self.imageView1.image = image1;
                self.imageView2.image = image2;
                
                // 合并
                UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 100), NO, 0.0);
                [image1 drawInRect:CGRectMake(0, 0, 100, 100)];
                [image2 drawInRect:CGRectMake(100, 0, 100, 100)];
                self.bigImageView.image = UIGraphicsGetImageFromCurrentImageContext();
                // 关闭上下文
                UIGraphicsEndImageContext();
            });
        });
    }
    
    - (UIImage *)imageWithURL:(NSString *)urlStr
    {
        NSURL *url = [NSURL URLWithString:urlStr];
        NSData *data = [NSData dataWithContentsOfURL:url]; // 这行会比较耗时
        return [UIImage imageWithData:data];
    }
    
    - (void)delay
    {
        //    NSLog(@"----touchesBegan----%@", [NSThread currentThread]);
        
        //    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        //        [self performSelector:@selector(run) withObject:nil afterDelay:2.0];
        //    });
        // 1.全局并发队列
        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        
        // 2.计算任务执行的时间
        dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC));
        
        // 3.会在when这个时间点, 执行queue中的任务
        dispatch_after(when, queue, ^{
            NSLog(@"----run----%@", [NSThread currentThread]);
        });
    }
    //- (void)run
    //{
    //    NSLog(@"----run----%@", [NSThread currentThread]);
    //}
    
    @end
  • 相关阅读:
    Realtime crowdsourcing
    maven 常用插件汇总
    fctix
    sencha extjs4 command tools sdk
    首次吃了一颗带奶糖味的消炎药,不知道管用不
    spring mvc3 example
    ubuntu ati driver DO NOT INSTALL recommand driver
    yet another js editor on windows support extjs
    how to use springsource tools suite maven3 on command
    ocr service
  • 原文地址:https://www.cnblogs.com/liuwj/p/6602194.html
Copyright © 2011-2022 走看看