[Xcode 實際操做]8、網絡與多線程-(13)使用異步方式下載網絡圖片

目錄:[Swift]Xcode實際操做html

本文將演示如何經過異步請求的方式,下載網絡圖片。swift

異步請求與同步請求相比,不會阻塞程序的主線程,而會創建一個新的線程。網絡

在項目導航區,打開視圖控制器的代碼文件【ViewController.swift】閉包

 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         //設置圖像視圖對象的位置在(40,80),尺寸爲(240,80)
14         self.imageView.frame = CGRect(x: 40, y: 80, width: 240, height: 280)
15         //將設置好的圖像視圖對象,添加到當前視圖控制器的根視圖
16         self.view.addSubview(imageView)
17         
18         //建立一個網址對象,指定請求網絡圖片的地址
19         let url = URL(string: "http://images.apple.com/v/imac/e/images/overview/imac_27_hero_large_2x.jpg")
20         //建立一個網絡請求對象
21         let request = URLRequest(url: url!)
22         
23         //利用網絡鏈接對象NSURLConnectiony,實現網絡的通訊
24         //網絡鏈接對象NSURLConnectiony已經不被推薦使用,請使用NSURLSession網絡會話類
25         NSURLConnection.sendAsynchronousRequest(request,
26         queue: OperationQueue.main,
27         completionHandler: {(response:URLResponse?,
28         data:Data?,error:Error?)->Void in
29             //在控制檯輸出當前的線程是否位於主線程
30             print(Thread.isMainThread)
31             //添加一個閉包語句,返回應用的主線程
32             DispatchQueue.main.async(execute: { () -> Void in
33                 //將網絡返回的數據對象,轉換爲圖像格式,
34                 let image = UIImage(data: data!)
35                 //而後在主線程裏更新圖像視圖的顯示內容
36                 self.imageView.image = image
37             })
38         })
39     }
40     
41     override func didReceiveMemoryWarning() {
42         super.didReceiveMemoryWarning()
43         // Dispose of any resources that can be recreated.
44     }
45 }
相關文章
相關標籤/搜索