Swift正在使用NSURLConnection异步下载同步(实例解析)「建议收藏」

Swift正在使用NSURLConnection异步下载同步(实例解析)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

原版的blog。转载请注明出处

http://blog.csdn.net/hello_hwc

一、同步异步两个概念

  简单来讲。同步就是函数或者闭包(objective c中的block)运行完成才干返回。

异步是立马返回,然后异步运行的动作结束后。再进行回调。

二、同步下载
同步下载:

class func sendSynchronousRequest(_ request: NSURLRequest,
returningResponse response:AutoreleasingUnsafeMutablePointer<NSURLresponse>
error error:NSErrorPointer)->NSdata?

參数:


request
要请求的URLRequest


reponse
回调參数,server返回的URL response


error
回调參数。推断是否有错误产生

下面下面载一张图片为例


能够发现。在view出现的时候。照片已经存在了,可是view加载较慢。由于要等待同步下载完毕

完整的代码:

class ViewController: UIViewController{
    var imageview = UIImageView(frame: CGRectMake(40,40,200,200))
    override func viewDidLoad(){
        super.viewDidLoad()
        imageview.contentMode = UIViewContentMode.ScaleAspectFit
        self.view.addSubview(imageview)
        let url = "http://f.hiphotos.baidu.com/image/pic/item/e1fe9925bc315c60191d32308fb1cb1348547760.jpg"
        let imageURL = NSURL(string:url)
        let urlRequest = NSURLRequest(URL: imageURL!)
        var response:NSURLResponse?
        var error:NSError?

var data = NSURLConnection.sendSynchronousRequest(urlRequest,returningResponse:&response,error:&error) as NSData? if error == nil && data?.length > 0{ var image:UIImage = UIImage(data:data!)! imageview.image = image } } override func didReceiveMemoryWarning(){ super.didReceiveMemoryWarning() }}


三、异步下载

	class func sendAsynchronousRequest(_ request: NSURLRequest,
		queue:NSOperationQueue!
		completionHandler handler:(NSURLResponse!,NSData!,NSError!))->Void

參数:


request
要请求的URLRequest


queue
当请求完毕或者出错的时候,闭包在这个队列上运行。更改UI要在主线程上运行


handler
当请求完毕或者出错的时候,运行的闭包

闭包的几个參数


reponse
回调參数,server返回的URL response


error
回调參数,推断是否有错误产生


NSData
下载到的数据

相同以一张图片为例


能够发现,view立马加载。可是图片不会立马出现。等到图片下载完了。UI会更新。

能够看到,异步下载不会堵塞UI,造成用户体验不好。
完整的代码

class ViewController: UIViewController{
    var imageview = UIImageView(frame: CGRectMake(40,40,200,200))
    override func viewDidLoad(){
    super.viewDidLoad()
    imageview.contentMode = UIViewContentMode.ScaleAspectFit
    self.view.addSubview(imageview)
    let url = "http://f.hiphotos.baidu.com/image/pic/item/e1fe9925bc315c60191d32308fb1cb1348547760.jpg"
    let imageURL = NSURL(string:url)
    let urlRequest = NSURLRequest(URL: imageURL!)
    NSURLConnection.sendAsynchronousRequest(urlRequest,queue:NSOperationQueue.mainQueue(),completionHandler:{
        (response: NSURLResponse!,data:NSData!,error:NSError!)-> Void in
        if error == nil && data?.length > 0{
            var image:UIImage = UIImage(data:data!)!
            self.imageview.image = image
       }
     })
    }
    override func didReceiveMemoryWarning(){
        super.didReceiveMemoryWarning()
    }
}

下载的图片原图

Swift正在使用NSURLConnection异步下载同步(实例解析)「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116710.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月17日 上午9:00
下一篇 2022年1月17日 上午9:00


相关推荐

  • zabbix5.0安装及配置

    zabbix5.0安装及配置

    2021年5月29日
    147
  • Java 教程

    1 Java 教程 我们的核心Java编程教程专为学生和专业人士设计。 Java是面向对象,基于类,并发,安全和通用的计算机编程语言。它是一种广泛使用的强大技术。 什么是Java …

    2022年1月24日
    45
  • wmic创建进程

    wmic创建进程wmic node ip user user password password Servicewhere W3SVC callstopserv node ip user user password password Servicewhere W3SVC callstartser node ip user user password password processwhere

    2025年8月12日
    7
  • Springboot集成kafka_Spring boot

    Springboot集成kafka_Spring bootspringboot集成TkMapper简化持久层法人代码熟悉,提高开发效率;先给大家截个图看一下效果这就是效果!!是不是感觉很爽。(TkMapper对单表的操作很方便的)下来我们进入正题,第一步:Pom文件中加载jar文件&lt;dependency&gt;&lt;groupId&gt;tk.mybatis&lt;/groupId&gt;&lt;ar…

    2022年10月6日
    5
  • LDA主题模型简介及Python实现

    LDA主题模型简介及Python实现一 LDA 主题模型简介 LDA 主题模型主要用于推测文档的主题分布 可以将文档集中每篇文档的主题以概率分布的形式给出根据主题进行主题聚类或文本分类 LDA 主题模型不关心文档中单词的顺序 通常使用词袋特征 bag of wordfeature 来代表文档 词袋模型介绍可以参考这篇文章 文本向量化表示 词袋模型 知乎了解 LDA 模型 我们需要先了解 LDA 的生成模型 LDA 认为一篇文章是怎么形成的呢 LDA 模型认为主题可以由一个词汇

    2026年3月19日
    1
  • volley7–NetworkDispatcher从网络中获取数据[通俗易懂]

    volley7–NetworkDispatcher从网络中获取数据

    2022年3月7日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号