第一部分 知识储备

1.对NSURLSesiion的认识

NSURLSesiion是苹果在iOS7推出的一个类,它具备了NSURLConnection所具备的方法,同时也比它更强大。苹果推出它的目的大有取代NSURLConnection的趋势或者目的。

 2.  NSURLSesiion的作用

NSURLSesiion中,任何请求都可以被看做是一个任务。而NSURLSesiionData 有两个子类:NSURLSessionDownlaodTask实现文件下载和NSURLSessionUploadTask实现文件上传。

 3.NSURLSession的获取

    NSURLSession的获取可以用NSURLSessionDownloadTaskdelegate的方法获取,但是必须得遵循这个协议。获取如下:

NSURLSessionDonfiguration defaultSessionconfiguration];

NSURLSessionDonfiguration delegate: self  delegateQueue:[NSOperationQueue mainQueue]];

 4.下载任务的创建

    NSURLSessionDownlaodTask* task=[self.session downloadTaskWithURL:url]

5.NSURLSessionDownloadDelegate的代理方法:

    它有三个方法:

ios NSTimer 暂停_ios NSTimer 暂停

6. 沙盒路径的获取

    NSString *path=[NSSearchPathForDiretoriesInDomains(NSDocumentDirectoriy, NSUserDomainMask, YES )  lastObject];

 7.caches路径的获取及里面文件名的创建

 NSString *caches=[NSSearchPathForDiretoriesInDomains(NSCachesDirectoriy, NSUserDomainMask, YES )  lastObject];  

NSString* filename=[caches stringByAppendingPathComponent:downloadTask.response.suggestedname];

第二部分  对程序几个属性的说明

 1. resumeData

resumeData

2.  task

NSURLSessionDownloadTask。因为在程序调用暂停(pause)这个方法时,必须拥有这个属性,怎么拿到它了?最好的办法就是让控制器拥有这个属性。

3. session

           该参数的类型是NSURLSession.在程序调用继续下载(resume)这个方法时,必须拥有这个session。因为之前的任务task被取消了,无法在复用了,所以用懒加载的方法,让session只创建一次,同时也让控制器拥有了这个属性。

 第三部分 程序实现流程(伪代码)

下面是文件下载的思路:

ios NSTimer 暂停_代理方法_02

   

   

第四部分 UI界面搭建

          

                   由于程序UI界面搭建十分容易,故在此不详细叙述。

 

第五部分  程序特别注意点

1.  在调用pause这个方法时,存在着一定的风险,因为self对task进行了强引用,task又对block进行了引用,block又对self进行引用,这就形成了循环使用。怎么解决这个问题呢?

解决方法:对self进行弱引用 __weak typedef(self)   vc=self

2. 如果设置了completion和block,又实现了代理方法,程序优先执行block

第六部分 代码截图

ios NSTimer 暂停_UI_03

ios NSTimer 暂停_ios NSTimer 暂停_04

ios NSTimer 暂停_文件下载_05

 


 

第七部分   程序截图

ios NSTimer 暂停_文件下载_06

ios NSTimer 暂停_ios NSTimer 暂停_07

ios NSTimer 暂停_代理方法_08

ios NSTimer 暂停_代理方法_09