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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 怎么创建CSV文件和怎么打开CSV文件[通俗易懂]

    怎么创建CSV文件和怎么打开CSV文件[通俗易懂]CSV(CommaSeparatedValues逗号分隔值)。.csv是一种文件格式(如.txt、.doc等),也可理解.csv文件就是一种特殊格式的纯文本文件。即是一组字符序列,字符之间已英文字符的逗号或制表符(Tab)分隔。在windows系统环境上.csv文件打开方式有多种,如记事本、excel、Notepad++等,只要是文本编辑器都能正确打开。1.工具/原料E…

    2022年7月20日
    13
  • 银河麒麟安装qt开发环境_优麒麟怎么样

    银河麒麟安装qt开发环境_优麒麟怎么样1.如果你对中标麒麟系统安装有疑问,请阅读上一篇文章:《中标麒麟/NeoKylinU盘安装系统》。2.进入系统打开终端,以root模式操作。&lt;1&gt;yuminstallgstream*libXext-devellibX11-devel&lt;2&gt;ln-s/usr/lib64/libXrender.so.1.3.0/usr/lib64/libXrend…

    2022年8月10日
    10
  • 深度学习常见的问题

    深度学习常见的问题

    2021年11月19日
    48
  • 手写算法-python代码实现Lasso回归

    手写算法-python代码实现Lasso回归手写算法-python代码实现Lasso回归Lasso回归简介Lasso回归分析与python代码实现1、python实现坐标轴下降法求解Lasso调用sklearn的Lasso回归对比2、近似梯度下降法python代码实现LassoLasso回归简介上一篇文章我们详细介绍了过拟合和L1、L2正则化,Lasso就是基于L1正则化,它可以使得参数稀疏,防止过拟合。其中的原理都讲的很清楚,详情可以看我的这篇文章。链接:原理解析-过拟合与正则化本文主要实现python代码的Lasso回归,并用实例佐证原

    2022年5月25日
    78
  • Python 官方文档:入门教程

    Python 官方文档:入门教程

    2021年10月26日
    39
  • es6数组 newSet 数组去重 并集 交集 差集

    es6数组 newSet 数组去重 并集 交集 差集数组去重vararr=[1,2,3,3,1,4];[…newSet(arr)];//[1,2,3,4]Array.from(newSet(arr));//[1,2,3,4][…newSet(‘ababbc’)].join(’’);//“abc”字符串去重newSet(‘icedoughnut’);//Set(11){“i”,“c”,“e”,””,“d”,…}并集vara=newSet([1,2,3]);varb=ne

    2022年10月25日
    0

发表回复

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

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