本文将演示如何使用使用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, width: 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 }