• iOS多线程开发小demo7 GCD队列组


    //  DYFViewController.m
    //  623-08-队列组
    //
    //  Created by dyf on 14-6-23.
    //  Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved.
    //
    
    #import "DYFViewController.h"
    
    @interface DYFViewController ()
    @property (weak, nonatomic) IBOutlet UIImageView *iconV1;
    @property (weak, nonatomic) IBOutlet UIImageView *iconV2;
    @property (weak, nonatomic) IBOutlet UIImageView *bigIconV;
    
    @end
    
    @implementation DYFViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    	// Do any additional setup after loading the view, typically from a nib.
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        NSLog(@"%@", [NSThread currentThread]);
        dispatch_group_t group = dispatch_group_create();
        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        
        __block UIImage *icon1 = nil;
        dispatch_group_async(group, queue, ^{
            NSLog(@"%@", [NSThread currentThread]);
            //
            icon1 = [self imageWithURL:@"http://image.cache.xiu8.com/live/125/125/997729.jpg"];
            
        });
        __block UIImage *icon2 = nil;
        dispatch_group_async(group, queue, ^{
            NSLog(@"%@", [NSThread currentThread]);
            //
            icon2 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/b2a9cfc88b7a56cfa59b8d09208fa1fb.jpg"];
        });
        
        dispatch_group_notify(group, dispatch_get_main_queue(), ^{
            NSLog(@"%@", [NSThread currentThread]);
            //
            self.iconV1.image = icon1;
            self.iconV2.image = icon2;
            
            UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 100), NO, 0);
            [icon1 drawInRect:CGRectMake(0, 0, 100, 100)];
            [icon2 drawInRect:CGRectMake(100, 0, 100, 100)];
            self.bigIconV.image = UIGraphicsGetImageFromCurrentImageContext();
            
            UIGraphicsEndImageContext();
        });
    }
    
    - (UIImage *)imageWithURL:(NSString *)iconPath
    {
        NSLog(@"%@", [NSThread currentThread]);
        NSURL *url = [NSURL URLWithString:iconPath];
        NSData *data = [NSData dataWithContentsOfURL:url];
        return [UIImage imageWithData:data];
    }
    
    @end
    

     小结:

    ------------队列组------

    1.有这么一种需求

    ·首先:分别异步执行2个耗时的操作

    ·其次:等2各异步操作都执行完毕后,再回到主线程执行操作

    2.若想要快速高效的实现上述需求,可以考虑用队列组

  • 相关阅读:
    开源图像标注工具labelme的安装使用及汉化
    win10启动远程桌面连接的设置
    maven 仓库搜索添加需要的jar包
    mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
    在Myeclipse中配置Maven
    JSP过滤器Filter配置过滤类型汇总
    js中location.href的用法
    session失效后跳转到登陆页面
    JS的三种弹框
    JOptionPane.showMessageDialog出现在浏览器下面的解决方法
  • 原文地址:https://www.cnblogs.com/dyf520/p/3805310.html
Copyright © 2020-2023  润新知