IOS 开发进阶--多线程和网络--NSURLSession详细解

本文深入探讨了iOS中NSURLSession的概念及其在多线程和网络操作中的应用。主要内容包括NSURLSession的功能介绍,如内存和文件系统的数据下载、上传,以及后台任务支持。此外,还详细讲解了如何进行基本的使用练习、实现下载进度跟踪和断点续传。通过实例代码展示了NSURLSession在实际开发中的具体应用。
摘要由CSDN通过智能技术生成

URLSession 的基本概念:

  • NSURLSession是在 ios7.0推出的,用于替代 NSURLSession(本身就是与与NSURLConnection是并列
  • NSURLSession支持后台网络操作,除非用户强行关闭应用程序。

1、NSURLSession提供的功能:

  1. 通过URL将数据下载到内存
  2. 通过URL将数据下载到文件系统
  3. 将数据上传到指定URL
  4. 在后台完成上述功能

对于小型数据,例如用户登录、下载小图像、JSON & XML仍然使用NSURLConnection的异步或同步方法即可

NSURLConnection 和 NSURLSession的关系示意图
这里写图片描述

(NSURLSession可以在任何时候进行挂起和执行操作)

2、NSURLSession的代码体现

在使用NSURLSession的时候 URLRequest很大的程度上是可以被 NSURLSessionConfigration 替代。
如果使用 get 请求,URLRequest是可以省略的。

1. NSURLSession的基本的使用练习

这是一个最常规的写法:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self sesssionDemo];
}

// MARK: - 常规代码
- (void)sesssionDemo {
    // 1. url
    NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/demo.json"];

    // 2. 如果使用 GET 请求,request 可以省略
    // session - 苹果为了方便程序员的开发,提供了一个全局的 session 单例 (我们是直接获取的,不需要创建)
    NSURLSession *session = [NSURLSession sharedSession];

    // 3. 数据任务 - 所有的任务,都是由session 发起的
    NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

       // 4.将得到数据进行返序列化
        NSLog(@"%@", [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL]);
    }];

    // 4. 启动任务(一定要启动任务)
    [task resume];
}

使用:
 1. 创建一个 url 路径
 2. 获取 session 的对象
 3. 通过 session 对象发起会话 task
 4. 启动 task 会话

 注意:启动 task 会话后是在后台开启一条线程发起下载的任务,将数据从服务器加载到本地或者从本地上传的服务器。
我们在实际开发中使用的 NSURLSession 的精简模式:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self sesssionDemo];
}

// MARK: - 精简代码
- (void)sesssionDemo {
    // 1. url
    NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/demo.json"];
    // 2. 启动会话
    [self taskWithURL:url];
}

- (void)taskWithURL:(NSURL *)url {
    // 1. 全局会话发起数据任务 - 所有的任务,都是由session 发起的
    [[[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

        NSLog(@"%@", [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL]);
    }] resume];
}


在第三方框架对于 NSURLSession 的基本的封装思路就是这样,给一个 url ,后直接启动就可以了。


注意点:
为了方便程序员使用,苹果提供了一个全局 session ,[NSURLSession sharedSession]
所有的任务都是由 session 发起的,session 的回调是异步的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值