NSUrlSession 网络会话的使用分三步:
1> 创建网络会话 【单例】
2> 实例化网络任务【默认挂起状态,并且在在子线程回调】
3> 开启网络任务【手动】
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSString *urlString = @"http://localhost/服务器资料/demo.json";
// 如果url中有汉字,需要做百分号转译,在iOS9以后使用新的方法 stringByAddingPercentEncodingWithAllowedCharacters:
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 1. 实例化一个网络会话(单例)
NSURLSession *session = [NSURLSession sharedSession];
// 2. 根据网络会话,实例化网络任务!
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// Block 回调,网络请求成功之后的回调! (默认是在子线程)
//注意: 1.data:二进制数据! 转换过来之后是否是json格式的数据,可通过转为字符串来查看.
// 2.在网络请求中,必须做失败处理!
if (data) { // 判断服务器是否响应回来数据.如果有响应数据,说明肯定访问成功!
// 这句代码是调试的时候最常用的一句代码!
// NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// NSLog(@"jsonString:%@",jsonString);
// 参数: Data 二进制数据(必须是JSON格式的二进制数据,如果不是,解析出来是 nil )!
// 在 OC 中 ,看到两个 ** 传 NULL(空地址) .一个 * 传 nil(空对象)!
// 返回值,就是解析之后的 OC 数据!
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
NSLog(@"dict:%@",dict);
// 接下来,就是字典转模型...
}
}];
// 3. 开启这个网络任务! 默认是挂起状态,需要手动开启.
[task resume];
}