Network(一)

我是demo

iOS 7.0 之后,苹果推出了新的网络 API —— NSURLSession。 NSURLSession supports the HTTP/1.1, SPDY, and HTTP/2 protocols. 从文档这句话中可以看出,新的网络库支持 HTTP 1.0 和 2.0 以及 Google 的 SPDY 网络协议。从这些特性上来讲,目前开发的 APP 都应该将网络库替换成 NSURLSession 了。首先探索下该网络库的使用。

Node JS 启动后台服务

网络请求就是客户端发起请求,服务端做出响应。作为 iOS 开发,如果没有后台数据的支持,只能到网络上找 API 了,但是我们可以通过 Node JS 实现简单的数据返回。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var http = require('http')
var server = http.createServer()

server.on('request', function(req, res) {
var jsonData = [{
name:'Jack',
age: 12
},
{
name:'Rose',
age: 13
}]
res.end(JSON.stringify(jsonData))
})

server.listen(9000,function(){
console.log('server is running ...')
})

上面这段代码解释为:
接口:http://127.0.0.1:9000
数据:

1
2
3
4
5
6
7
8
[{
name:'Jack',
age: 12
},
{
name:'Rose',
age: 13
}]

通过 curl 验证:

1
2
3
# maple @ iMac in ~/Maple [8:53:14]
$ curl http://127.0.0.1:9000
[{"name":"Jack","age":12},{"name":"Rose","age":13}]%

OK, 目前为止服务端的数据已经有了。

NSURLSession Tour

1
2
3
4
5
6
7
8
9
10
11
12
- (void)loadData {
NSURLSession *session = [NSURLSession sharedSession];
NSURL *url = [NSURL URLWithString:@"http://127.0.0.1:9000"];
NSURLSessionDataTask *task = [session dataTaskWithURL:url
completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

id obj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves
error:nil];
NSLog(@"%@ %@ %@ %@", obj, response, error, [NSThread currentThread]);
}];
[task resume];
}

通过 NSURLSession 请求网络的步骤:

Step1:创建 NSURLSession 对象;
Step2:构造 url;
Step3:通过 NSURLSession 的实例方法 dataTaskWithURL: completionHandler: 构造网络请求,返回 NSURLSessionDataTask 对象
Step3: NSURLSessionDataTask 对象通过 resume 方法启动网络请求

这里 id obj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil]; 实现了 JSON 数据的序列化,obj 的类型是数组。

操作非常的简单,当然上面的请求是 GET 请求,下一篇看一下 POST 请求。

-------------本文结束谢谢欣赏-------------
Alice wechat