zoukankan      html  css  js  c++  java
  • 2. GCD的使用(线程间通信---子线程执行耗时操作/主线程更新UI)

    //
    //  ViewController.m
    //  07-线程间通信(加载图片,在主线程中更新UI)
    //
    //  Created by Jasperay on 15/9/3.
    //  Copyright (c) 2015年 @aLonelyRoot3. All rights reserved.
    //
    
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @property (weak, nonatomic) IBOutlet UIButton *button;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
       
    }
    
    
    // 加载网络图片的方法
    - (UIImage *)loadImageWithUrl:(NSString *)urlStr {
    
    //  URL: 同一资源定位符.定位唯一资源
        
        NSURL *url = [NSURL URLWithString:urlStr];
        
        NSData *data = [NSData dataWithContentsOfURL:url];
        
        UIImage *img = [UIImage imageWithData:data];
        
        return img;
    }
    
    
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    
    //  1.在子线程下载图片
        
    //  首先, 需要开启新的线程, 需要使用异步函数
        
    //  然后, 并发任务都可以放在全局并发队列, 而UI操作放在主队列
        
        
    //  因此可以使用(异步函数 + 全局并发队列) 内部嵌套 一个(异步函数 + 主队列)的形式-----常用
        
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            NSString *urlStr = @"http://img1a.xgo-img.com.cn/pics/1538/a1537491.jpg";
            UIImage *img = [self loadImageWithUrl:urlStr];
            
    
    //  2.在主线程更新UI
    //      此时回到主线程,更新UI(给button设置背景图)
            dispatch_async(dispatch_get_main_queue(), ^{
                [self.button setBackgroundImage:img forState:UIControlStateNormal];
            });
        });
    
    }
    
    
    @end
  • 相关阅读:
    DDL、DML和DCL的区别与理解
    oracle中游标详细用法
    委托与事件
    c#中的引用类型和值类型
    DevExpress控件给数据列表中特殊行数据设置颜色
    windows下redis的安装
    python操作数据库
    python操作excel
    iMessage, Facetime 解决办法
    iOS 静态库,动态库与 Framework
  • 原文地址:https://www.cnblogs.com/chnyang/p/4780267.html
Copyright © 2011-2022 走看看