Swift正在使用NSURLConnection异步下载同步(实例解析)
原版的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()
    }
}
下载的图片原图
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGVsbG9fSHdj/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="300" height="450" alt="">
Swift正在使用NSURLConnection异步下载同步(实例解析)的更多相关文章
- JavaWeb实现文件上传下载功能实例解析
		转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ... 
- JavaWeb实现文件上传下载功能实例解析 (好用)
		转: JavaWeb实现文件上传下载功能实例解析 转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web ... 
- ios 网络数据下载和JSON解析
		ios 网络数据下载和JSON解析 简介 在本文中笔者将要给大家介绍ios中如何利用NSURLConnection从网络上下载数据,如何解析下载下来的JSON数据格式,以及如何显示数据和图片的异步下载 ... 
- iOS之网络数据下载和JSON解析
		iOS之网络数据下载和JSON解析 简介 在本文中笔者将要给大家介绍IOS中如何利用NSURLconnection从网络上下载数据以及如何解析下载下来的JSON数据格式,以及如何显示数据和托图片的异步 ... 
- Android 中的异步下载
		网上提到最多的就是利用AsyncTask进行异步下载,用android-async-http第三方库的也比较多.这里写点注意事项. 先说说android-async-http,这个库发送请求利用thr ... 
- 原生网络请求以及AFN网络请求/异步下载
		这里对网络请求方式做一个总结. 原生方式同步GET请求: NSString *urlStr = @"http://apis.juhe.cn/mobile/get?phone=13429667 ... 
- 「微信小程序」PHP异步进程async-helper实例详解
		PHP异步进程async-helper实例详解 PHP 的异步进程助手,借助于 AMQP 实现异步执行 PHP 的方法,将一些很耗时.追求高可用.需要重试机制的操作放到异步进程中去执行,将你的 HTT ... 
- 深入理解MVC          C#+HtmlAgilityPack+Dapper走一波爬虫    StackExchange.Redis 二次封装   C# WPF 用MediaElement控件实现视频循环播放    net 异步与同步
		深入理解MVC MVC无人不知,可很多程序员对MVC的概念的理解似乎有误,换言之他们一直在错用MVC,尽管即使如此软件也能被写出来,然而软件内部代码的组织方式却是不科学的,这会影响到软件的可维护性 ... 
- iOS-同步下载与异步下载
		一.同步下载(交互不好,容易出现卡死现象,一般下载数据较小或有特定需求才使用). 发送同步请求后,程序将停止用户交互,直到服务器返回数据完成后,才进行下一步的操作. //第一步:创建URL NSURL ... 
随机推荐
- ThinkPhp学习07
			原文:ThinkPhp学习07 简单CRUD操作 public function show() { $m=M('User'); // $arr=$m->find(2); //查找id=2的数据, ... 
- js 常用正则表达式分析详解
			1.整数或者小数:/^((0{1}|[1-9]{1}[0-9]+)\.{1}[0-9]+|[1-9]{1}[0-9]*|0)$/ 分析:分类讨论,如果是小数,则有两种形式 0.111对应的是 0{ ... 
- 怎样在Android实现桌面清理内存简单Widget小控件
			怎样在Android实现桌面清理内存简单Widget小控件 我们常常会看到类似于360.金山手机卫士一类的软件会带一个widget小控件,显示在桌面上,上面会显示现有内存大小,然后会带一个按键功能来一 ... 
- linux-sfdisk 使用方法
			功能说明:硬盘分区工具程序. 语 法:sfdisk [-?Tvx][-d <硬盘>][-g <硬盘>][-l <硬盘>][-s <分区>][-V < ... 
- Bdsyn百度手机助手是何物,它是怎样神不知鬼不觉地安装到你的电脑里的?
			[电脑软件管理中Bdsyn手机助手的问题]Bdsyn手机助手 is developed by Baidu, Inc. and is used by 10 users of Software Infor ... 
- delphi 自我删除和线程池(1000行代码,需要仔细研究)
			unit Unit4; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ... 
- XML序列化反序列化—常用类
			public class XMLSerializer { #region (public) xml序列化 /// <summary> /// ... 
- Xcode 4.6.2 运行次数为偶数程序崩溃问题
			如果你的MAC 系统升级到10.8.4 Xcode升级到4.6.2,在工程运行第二次.第四次.第六次 ... 的时候程序就会崩溃 无论是新建的模板工程也会这样,这个属于系统BUG,在stackove ... 
- zoj3795 Grouping --- 良好的沟通,寻找最长的公路
			给定一个图,为了保持图分裂至少成多个集合的集合内可以使点没有直接或间接的关系. 首先,题意可以得到图中可能含有环.该环的内侧是肯定是要被拆卸. 图点降低建DAG画画,能想象..图从零点渗透深入,在点中 ... 
- 移动M站建设
			电商总结(五)移动M站建设 最近在一直在搞M站,也就是移动web站点.由于是第一次,也遇到了很多问题,所以把最近了解到的东西总结总结.聊一聊什么是移动M站,它有啥作用和优势. 也有人会问,M站和A ... 
