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

    目录:[Swift]Xcode实际操作

    本文将演示如何通过异步请求的方式,下载网络图片。

    异步请求与同步请求相比,不会阻塞程序的主线程,而会建立一个新的线程。

    在项目导航区,打开视图控制器的代码文件【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,  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 }
  • 相关阅读:
    pymssql连接Azure SQL Database
    Python升级后ssl模块不可用问题解决和浅析
    CentOS 7升级Python到3.6.6后yum出错问题解决总结
    Python监控SQL Server数据库服务器磁盘使用情况
    fastjason常用方法
    类型擦除真的能完全擦除一切信息吗?java 泛型揭秘
    spring boot打包成war包的页面该放到哪里?
    为什么delete后磁盘空间没有释放而truncate会释放?
    leetcode 977. Squares of a Sorted Array
    leetcode 844. Backspace String Compare
  • 原文地址:https://www.cnblogs.com/strengthen/p/10060916.html
Copyright © 2011-2022 走看看