早期的时候(iOS5-7)我们使用的iOS-APP内置网络都是通过NSURLConnection完成的在iOS7之后,国内普片使用AFNetworking来进行网络操作(包括下载,请求,访问,数据传输等)也有的公司需要自己的写网络操作,在iOS9开始,NSURLConnection已经被废弃,官方推荐的是使用URLSession
以下是一个简单的网络请求:
NSURL *url=[NSURL URLWithString:@"https://www.百度.com"];
NSURLRequest *urlRequest=[NSURLRequest requestWithURL:url];
NSURLSession *urlSession=[NSURLSession sharedSession];
NSURLSessionDataTask *dataTask=[urlSession dataTaskWithRequest:urlRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSDictionary *content = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@"%@",content);
}];
根据官方提供的功能,自己也能做出很多功能性操作:
NSURLSessionDataTask 用于接收文件的数据xml/json以及二进制文件的数据获取
NSURLSessionUploadTask 用于数据上传:
NSURLSessionUploadTask *uploadTask=[urlSession uploadTaskWithRequest:urlRequest fromData:[NSData new] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
}];
NSURLSessionDownloadTask 用于文件的下载
NSURLSessionDownloadTask *downloadTask=[urlSession downloadTaskWithRequest:urlRequest completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
}];
NSURLSession通过delegate的方式在异步处理任务,使用常用的两种NSURLSessionTaskDelegate和NSURLSessionDownloadDelegate
以下是代码:
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *inProcessSession = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
NSString *url = @"https://www.baidu.com";
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
NSURLSessionTask *dataTask = [inProcessSession dataTaskWithRequest:request];
两个代理方式:
// NSURLSessionDownloadDelegate
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{
NSLog(@"下载完成");
}
// NSURLSessionTaskDelegate
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error{
NSLog(@"执行结束");
}