如果我们要自定义代理来接收数据(数据任务data_task)的话,我们必须要实现下面两个代理(NSURLSessionDataDelegate, NSURLSessionTaskDelegate)方法:

如果我们的app需要在URLSession:dataTask:didReceiveData:方法返回之后使用数据,那么我们应该自己负责去存储这些数据。

例如,Web浏览器需要在数据到达时渲染之前已经被接收的数据,为了达到这个目的:

🌈🌈🌈 获取数据的做法:

把任务对象和NSMutableData对象一一映射到一个字典中进行存储,然后对data对象使用appendData: 方法把新到达的数据添加进去。

其实AFNetworking也是这么做的,我摘录了一段AFNetworking中关于该知识的代码:

@property (nonatomic, strong) NSMutableData *mutableData;

- (void)URLSession:(__unused NSURLSession *)session
          dataTask:(__unused NSURLSessionDataTask *)dataTask
    didReceiveData:(NSData *)data
{
    [self.mutableData appendData:data];
}

现在来看一下官方文档中的例子,下面的例子展示了怎样创建和开始一个任务:

/// Objective-C
NSURL *url = [NSURL URLWithString:@"https://www.example.com"];
NSURLSessionDataTask *task = [default_session dataTaskWithURL:url];
[task resume];
/// Swift
if let url = URL(string:"https://www.example.com"){
        let task = default_session.dataTask(with: url)
        task.resume()
}

results matching ""

    No results matching ""