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
  • 相关阅读:
    蓝桥杯java 基础练习 完美的代价
    C# 获得手机归属地功能
    c# HttpWebRequest与HttpWebResponse(转)
    C# Winfrom小黄鸡功能调用
    Winfrom 抓取web页面内容代码
    Winform将网页生成图片
    Winform上传下载文件代码
    Jquery LigerUI框架学习(二)之Tree于Tab标签实现iframe功能
    Jquery LigerUI框架学习(一)
    C# 生成简单验证码
  • 原文地址:https://www.cnblogs.com/liuwj/p/6602194.html
Copyright © 2011-2022 走看看