美文网首页iOS、swift技术交流!
NSURLConnection和NSURLSession

NSURLConnection和NSURLSession

作者: 光明程辉 | 来源:发表于2016-03-08 23:45 被阅读327次
    • NSURLConnection和NSURLSession都是网络请求类!

    • 它们都可以实现数据请求和上传数据。

    • NSURLConnection这个API未来将会被NSURLSession取代!因为在 2013 的 WWDC 上,苹果推出了 NSURLConnection
      的继任者:NSURLSession。

    • 现在主流的网络开发框架AFNetworking,已经是添加了NSURLSession相关的支持了。
    • NSURLSession包括了与之前相同的组件,NSURLRequest与 NSURLCache,但是把 NSURLConnection 替换成了NSURLSession、NSURLSessionConfiguration
      以及 NSURLSessionTask
      的 3 个子类:
      -NSURLSessionDataTask
      -NSURLSessionUploadTask
      -NSURLSessionDownloadTask

    • 这 3 个子类封装了现代程序三个最基本的网络任务:获取数据,比如 JSON 或者 XML,上传文件和下载文件。

    • NSURLSessionDownloadTask:下载用的Task;
      NSURLSessionDataTask:可以上传内容,上传完成后再进行下载;
      NSURLSessionUploadTask:上传用的Task,传完以后不会再下载返回结果(是NSURLSessionDataTask的子类);

    • 补充一下:

      1-->NSURL
       1> 将字符串转为网络资源定位符
       + (instancetype)URLWithString:(NSString *)URLString;
      
    2.--->NSData
      1> 同步获取网络数据
      + (instancetype)dataWithContentsOfURL:(NSURL *)url;
      2> 异步获取网络数据(召唤一个人帮你干活的意思!!!)
      + (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;
    
    3.--->NSURLRequest
      1> 创建请求
      + (instancetype)requestWithURL:(NSURL *)URL;
    
    4、---->NSURLResponse
    1> 获取资源的总大小
    @property (readonly) long long expectedContentLength;
    2> 获取资源的名字
    @property (readonly, copy) NSString *suggestedFilename; 
    

    NSURLConnection的介绍!

    NSURLConnection是可以实现同步和异步的。但别忘了要实现代理<NSURLConnectionDataDelegate>
    -可以实现同步和异步请求:

    1> 向服务器发起同步请求
    + (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;
    
    2> 向服务器发起异步请求    
    + (NSURLConnection*)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate;
    
    • 同步请求:

    • // urlStr有中文
      NSString *urlStr = @"http://img.pconline.com.cn/images/upload/upc/tx/photoblog/1512/22/c7/16739418_1450755319331_mthumb.jpg";
      // 注意有中文要进行转码,转为UTF8
      NSURL *url = [NSURL URLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
      // 请求类
      NSURLRequest *request = [NSURLRequest requestWithURL:url];
      // 服务器响应
      NSURLResponse *response = [[NSURLResponse alloc] init];
      NSLog(@"--开始下载--");
      // sync 同步     async异步
      NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
      NSLog(@"--下载完成--");
      
      NSLog(@"%ld",data.length);
      
    • 异步请求:
      NSString *urlStr = @"http://127.0.0.1/dataSource/阿安踏.json";
      // 带中文,要转换
      NSURL *url = [NSURL URLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
      NSURLRequest request = [NSURLRequest requestWithURL:url];
      // 异步请求
      // + (NSURLConnection
      )connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate;
      _connection = [NSURLConnection connectionWithRequest:request delegate:self];

      // 状态栏中显示网络状态
      [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
      }
      
    • 代理方法:
      NSURLConnection代理方法
      1> 下载数据失败
      - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
      2> 接收到数据【数据较多时会执行多次】
      - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
      3> 接受到服务器的响应
      - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
      4> 数据接收完成
      - (void)connectionDidFinishLoading:(NSURLConnection *)connection;

    NSURLSession介绍

    • NSURLSession[都是异步操作,且这是一个单例类]
      -1> 方法一

      • (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler

        2> 方法二

        • (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler

          3> 开始执行操作

        • (void)resume;
          // 开始执行操作
          [task resume];

    • 简单使用:
      // 构建session
      NSURLSession *session = [NSURLSession sharedSession];// 单利类
      // 网络请求地址
      NSString *urlStr = @"http://127.0.0.1.local/dataSource/LV-价格.json";
      // task
      NSURLSessionDataTask *task = [session dataTaskWithURL:[NSURL URLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
      NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
      NSLog(@"%@",dict);
      }];

       // 开始执行操作
      [task resume];
      

    相关文章

      网友评论

      本文标题:NSURLConnection和NSURLSession

      本文链接:https://www.haomeiwen.com/subject/whbzkttx.html