如何用NSURLSession替代NSURLConnection

众所周知,iOS9.0以后,NSURLConnection将逐渐被NSURLSession取代,但是刚刚接触的朋友可能对于NSURLSession的用法并不是很了解,下面小编将根据自己的理解教大家如何同比置换两个方法~

他们需要请求的东西相同,比如:

    NSURL *url = [NSURL URLWithString: @"http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg"];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL: url cachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 10];
    [request setHTTPMethod: @"GET"];

NSURLConnection用法:

    [NSURLConnection sendAsynchronousRequest: request
                                       queue: [NSOperationQueue mainQueue]
                           completionHandler: ^(NSURLResponse *response, NSData *data, NSError *error){
                               if (error) {
                                
                               } else {
                                   NSDictionary *jsonObject=[NSJSONSerialization
                                                             JSONObjectWithData:data
                                                             options:NSJSONReadingMutableLeaves
                                                             error:nil];
                                   NSLog(@"%@",jsonObject);
                               }
                           }];

NSURLSession用法:

    NSURLSessionDataTask *sessionDataTask = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if (error) {

        } else {
            NSDictionary *jsonObject=[NSJSONSerialization
                                      JSONObjectWithData:data
                                      options:NSJSONReadingMutableLeaves
                                      error:nil];

        }
    }];
    [sessionDataTask resume];

亲们请注意,本人只是随便找了一个图片的请求网址,如果亲们想请求数据,就可以通过我上边写的方法直接将NSData转化为字典啦!到此基本替换功能完成!

*****重要的事情说三遍:

记住一定需要将task resume才可以执行请求!

记住一定需要将task resume才可以执行请求!

记住一定需要将task resume才可以执行请求!

对于NSURLConnection的代理方法调用,请看下边

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

对于NSURLSession的代码调用,请看下边:

NSURLSessionConfiguration *cfg = [ NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:cfg delegate:self delegateQueue:[NSOperationQueue mainQueue]];
对于代理方法的实现,NSURLSession有三个代理方法,均是上面这个代理方法进行调用,三个代理分别为:

NSURLSessionDelegate, NSURLSessionDataDelegate, NSURLSessionTaskDelegate。

相信经过上面的介绍,大家应该对于NSURLSession有了初步的理解,想要了解的更加详细,可以自己参照官方文档继续研究啦~


友情链接:iOS9.0之后,要手动配置info.plist修改请求为https,具体为

升级为iOS9后,默认请求类型为https,如何使用http进行请求会报错

The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.

原因  iOS9引入了新特性App Transport Security (ATS)

新特性要求App内访问的网络必须使用HTTPS协议。
但是现在公司的项目使用的是HTTP协议,使用私有加密方式保证数据安全。现在也不能马上改成HTTPS协议传输。

 

解决方案

方案一:让服务器修改为TLS1.2

 

方案二:在plist中设置使用http请求

  1. 在Info.plist中添加NSAppTransportSecurity类型Dictionary

  2. NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES

第一步:在plist中添加NSAppTransportSecurity项,此项为NSDictionary

第二步:在NSAppTransportSecurity下添加

1
NSAllowsArbitraryLoads类型为Boolean,value为YES

技术分享

 

技术分享

 

苹果正在加大应用安全的管控,这个举措可以看出苹果对信息安全的重视,也暴露出大部分应用传输数据时都是未经过加密的,或使用私有方式加密,以至于苹果开始对开发者提出要求。
私有加密虽然一定程度上是安全的,但是终究不是一个长久之计。应该早日使用HTTPS确保信息安全



参考链接:http://www.bubuko.com/infodetail-1135674.html



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值