美文网首页
NSURLConnection和NSURLSession的区别

NSURLConnection和NSURLSession的区别

作者: 8fe8946fa366 | 来源:发表于2018-04-02 10:48 被阅读24次

1.NSURLConnection的常用方法

发送网络请求的三种方法:这几个api现在都被废弃了

发送同步请求  sendSynchronousRequest:(NSURLRequest *)request

发送异步请求  sendAsynchronousRequest:(NSURLRequest*) request

代理发送异步请求  )initWithRequest:(NSURLRequest *)request delegate:(nullable id)delegate

2.NSURLSession的常用方法

两个主要的概念session和task

创建session有两种方法:

1.NSURLSession* session = [NSURLSessionsharedSession];

2NSURLSession* session = [NSURLSessionsessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]delegate:self delegateQueue:[[NSOperationQueue alloc]init]];设置了代理和任务执行的队列

⚠️:这里就是一个用了NSOperation但是没有用gcd的🌰

创建task:可以创建三种类型的task,NSURLSessionTask并没有做实质的事,他有三个不同的子类,负责执行不同类型的请求操作:NSURLSessionDataTaskNSURLSessionUploadTaskNSURLSessionDownloadTask。创建完之后的状态都是挂起,需要手动resume。

⚠️:NSURLSessionConfiguration是创建session时设置的请求参数,这个参数包含哪些信息呢?

3.下载文件的区别

NSURLConnection下载文件的时候先把文件下载到内存,然后写入沙盒,这样做如果下载的文件非常大就会引起内存的暴增,原生的NSURLConnectionAPI是没有办法解决这个问题的,需要我们进行额外的操作。

思路:

1.在接受到响应的时候,即在didReceiveResponse中创建一个空的沙盒文件,并且创建一个NSFilehandle类。

2.在接受到具体数据的时候,即在didReceiveData中向沙盒文件中写入数据。

通过NSFilehandle的- (void)seekToFileOffset:(unsigned long long)offset;方法,制定文件的写入位置。或者通过NSFilehandle的- (unsigned long long)seekToEndOfFile;方法,直接制定文件的写入位置为文件末尾。

然后通过NSFilehandle的writeData方法,我们可以将数据不断写入沙盒文件。

3.在下载完成之后,关闭沙盒文件。

NSURLSession就不需要这么麻烦了,他在下载文件的时候自动就实现了一边下载一边写入沙盒的操作。使用NSURLSessionUploadTask下载文件,会默认下载到沙盒中的tem文件中,不会出现内存暴涨的情况,但是在下载完成后会把temp中的临时文件删除,需要在初始化任务方法时,在completionHandler回调中增加保存文件的代码。还有一个缺点是无法获取下载文件的进度。

思路:

[self.taskcancelByProducingResumeData:^(NSData*_NullableresumeData) {

       self.resumeData= resumeData;

    }];

取消以后再开始下载的时候,通过resumeData重新创建一个task

if(self.resumeData) {

       //如果resumeData有值的话,就说明是暂停以后继续下载的,重新定义task

       self.task= [self.sessiondownloadTaskWithResumeData:self.resumeData];

    }

⚠️:NSURLSession没办法做到离线断点续传。

4.发送请求的区别

NSURLConnection实例化对象,实例化开始,默认请求就发送(同步发送),不需要调用start方法。而cancel可以停止请求的发送,停止后不能继续访问,需要创建新的请求。

NSURLSession有三个控制方法,取消(cancel)、暂停(suspend)、继续(resume),暂停以后可以通过继续恢复当前的请求任务。

相关文章

网友评论

      本文标题:NSURLConnection和NSURLSession的区别

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