NSURLSession

NSURLSession

本身是抽象类 ,我是也是使用它的子类 :

  • download data upload

然后创建task 来完成 。

创建session

NSURLSession *session = [NSURLSession sharedSession];

加入任务

NSURLSessionTask *task = [session dataTaskWithRequset:[NSURLRequest requestWithURL[NSURL URLWithString xxx]] completionHandler:^(NSData *data){

//data 就是服务器返回的数据

[NSJSONSerialization JSONObjectWithData:data option:kNilOption error:nil];

}];

启动任务

[task resume];

创建post 请求

需要创建一个可变的NSMutableURLRequest来设置请求头等信息。

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL urlWithString:xxxx]];     
request.HTTPMethod = @"POST";       
request.HTTPBody = [@"xxxx" dataWithEncoding:NSUTF8StringEncoding];

下载

下载以后 ,默认的下载的文件会放在temp文件 ,然后我们自己要移动文件到需要的地方 。

代理方法 。

< NSURLSessionDataDelegate >

 NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc] init]];
    
    创建任务
    NSURLSessionDataTask *task = [session dataTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/login?username=123&pwd=4324"]]];
    
    启动任务
    [task resume];  
#pragma mark - 
/**
 * 1.接收到服务器的响应
 */

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
{
    NSLog(@"%s", __func__);
    
    // 允许处理服务器的响应,才会继续接收服务器返回的数据
    //从响应头里查看服务器给我们的响应是不是我们想要的 ,然后决定是不是继续下载数据操作 。
    completionHandler(NSURLSessionResponseAllow);
    
    // void (^)(NSURLSessionResponseDisposition)
}

/**
 * 2.接收到服务器的数据(可能会被调用多次)
 */
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
{
    NSLog(@"%s", __func__);
}

/**
 * 3.请求成功或者失败(如果失败,error有值)
 */
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
    NSLog(@"%s", __func__);
}

大文件下载

断点回复下载的时候 ,需要注意 ,默认下载的文件都是下载到temp文件中 。所以暂停的时候,要把task 和temp 中的文件都保存起来 。因为temp可能随时释放 。

但是 ,回复时候,task 还是会去temp找文件 。

需要增停的时候 。要调用 [task suspend]

如果是调用的停止方法 。cancel 。任务就不能恢复了 。

你可能感兴趣的:(NSURLSession)