ios urlsession html,自己动手写一个 iOS 网络请求库(一)—— NSURLSession 初探

本系列文章中,我们将尝试使用 NSURLSession 技术构建一个自己的网络请求库。

NSURLSession 简介

NSURLSession 是 iOS7 引入的新网络请求接口,在 WWDC2013 中有详细介绍,下面是描述其结构的一页 slides:

9df447922f42c8b24007c0ec16ba39f0.png

当应用在前台时,NSURLSession 跟 NSURLConnection 没有什么区别,但是在程序切换到后台之后 Background Session 就会更加灵活。

尝试 NSURLSession

准备工作

新建一个名为 BuildYourHTTPRequestLibrary 的单页面应用,在页面上居中放置一个按钮,名为 Request:

2fc1e29fab1e8993e25490b4fc006e48.png

拖动绑定 Touch Up Inside 事件:

8136a5768ff370d90f48536da0a16040.png

744d50be922a25f07568b571ba88aefe.png

使用 NSURLSession

在 mainButtonBeTapped 函数内填充以下代码:@IBAction func mainButtonBeTapped(sender: AnyObject) {

let session = NSURLSession.sharedSession()

let request = NSURLRequest(URL: NSURL(string: "http://baidu.com")!)

let task = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in

let string = NSString(data: data, encoding: NSUTF8StringEncoding)

println(string)

})

task.resume()

}

运行项目,点击按钮,查看结果:

41cf9deeb9cb6b708c6252d4f3abb953.png

使用成功!

感受异步

异步

改写 mainButtonBeTapped 函数的代码:@IBAction func mainButtonBeTapped(sender: AnyObject) {

let session = NSURLSession.sharedSession()

let request = NSURLRequest(URL: NSURL(string: "http://baidu.com")!)

let task = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in

println("just wait for 5 seconds!")

sleep(5)

let string = NSString(data: data, encoding: NSUTF8StringEncoding)

println(string)

})

task.resume()

}

再次尝试,两次打印之间间隔了五秒,主线程未阻塞,证明 NSURLSession 为异步执行。

阻塞

尝试多次点击,我们能够看到每五秒执行一次,直到全部执行完毕。

NSURLSession 采用的是 “异步阻塞” 模型,即所有请求在发出后都进入 2# 线程执行,在 2# 线程内部按照阻塞队列模式执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值