zoukankan      html  css  js  c++  java
  • [Xcode 实际操作]八、网络与多线程-(22)使用GCD多线程技术异步下载图片

    目录:[Swift]Xcode实际操作

    本文将演示如何使用使用GCD多线程技术异步下载图片。

    Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法。

    它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。

    它是一个在线程池模式的基础上执行的并发任务。

    在 Mac OS X 10.6 雪豹中首次推出,也可在 iOS 4 及以上版本使用。

     1 import UIKit
     2 
     3 class ViewController: UIViewController {
     4 
     5     //给当前视图控制器类,添加一个图像视图属性。
     6     //该图像视图对象,将用来显示下载后的网络图片
     7     var imageView = UIImageView()
     8     
     9     override func viewDidLoad() {
    10         super.viewDidLoad()
    11         // Do any additional setup after loading the view, typically from a nib.
    12         
    13         //设置图像视图的位置在(20,80),尺寸为280,100
    14         imageView.frame = CGRect(x: 20, y: 80,  280, height: 280)
    15         //将设置好的图像视图对象,添加当前视图控制器的根视图
    16         self.view.addSubview(imageView)
    17         
    18         //创建一个字符串对象,指定网络图片的地址
    19         let picPath = "https://www.cnblogs.com/strengthen//images/logo.png"
    20         //将字符串转换为网址对象
    21         let picUrl = URL(string:picPath)
    22         
    23         //使用分离新线程选择器方法,创建一个线程,用来执行下载图片的方法
    24         let globalQueue = DispatchQueue.global()
    25         //创建一个异步方法,用来下载网络图片
    26         globalQueue.async
    27         {
    28             //通过Data下载网络图片,
    29             //并将下载后的二进制数据存储在常量种
    30             let picData = try? Data(contentsOf: picUrl!)
    31             //将数据对象,转换为图片对象
    32             let picture = UIImage(data: picData!)
    33             //返回主线程
    34             DispatchQueue.main.async
    35             {
    36                 //并在主线程中,更新界面上的图像视图的内容
    37                 self.imageView.image = picture
    38             }
    39         }
    40     }
    41 
    42     override func didReceiveMemoryWarning() {
    43         super.didReceiveMemoryWarning()
    44         // Dispose of any resources that can be recreated.
    45     }
    46 }
  • 相关阅读:
    [开发笔记]-使用bat命令来快速安装和卸载Service服务
    [开发笔记]-多线程异步操作如何访问HttpContext?
    [开发笔记]-Windows Service服务相关注意事项
    [开发笔记]-VS2012打开解决方案崩溃或点击项目崩溃
    Chrome 开发者工具有了设备模拟器
    Mysql查看数据库表容量大小
    golang操作mysql数据库
    golang命令和VSCode配置
    golang广度优先算法-走迷宫
    golang爬取免费代理IP
  • 原文地址:https://www.cnblogs.com/strengthen/p/10074806.html
Copyright © 2011-2022 走看看