文件下载

  1. 小文件(数据全部保存到内存中,无法显示进度):
    1. 直接通过NSData的方法下载
    • 通过NSURLSessionDataTask-block下载
    • 通过NSConnection-block发送请求(过期不用)
  • 大文件断点下载(实现功能:内存控制、进度显示、暂停与取消后继续下载):

    • 通过NSURLSessionDownloadTask-delegate下载
      • 注意暂停与取消resume,继续下载的地方是不同的,要做判断设置
    • 通过NSConnection-delegate下载(过期不用)
  • 大文件离线断点下载(实现功能:内存控制、进度显示、暂停与取消后继续下载、程序重新打开显示已经下载的进度与继续下载):

    • 通过NSURLSessionDataTask-delegate下载
      • NSURLSessionDownloadTask提供了断点下载的方法,但该方法无法实现离线下载功能,只能通过NSURLSessionDataTask实现;
    • 通过NSConnection-delegate下载(过期不用)

文件下载使用推荐:

  1. 简单(小文件下载):通过NSData下载或者NSURLSessionDataTask-block下载

  2. 进阶(大文件断点下载):通过NSURLSessionDownloadTask下载

  3. 高级(离线断点下载):通过NSURLSessionDataTask下载

#### 使用多线程下载文件思路(仅适用于NSURLConnection,NSURLSession已经自动实现多线程)(过期)

01 开启多条线程,每条线程都只下载文件的一部分(通过设置请求头中的Range来实现
02 创建一个和需要下载文件大小一致的文件,判断当前是那个线程,根据当前的线程来判断下载的数据应该写入到文件中的哪个位置。(假设开5条线程来下载10M的文件,那么线程1下载0-2M,线程2下载2-4M一次类推,当接收到服务器返回的数据之后应该先判断当前线程是哪个线程,假如当前线程是线程2,那么在写数据的时候就从文件的2M位置开始写入)
03 代码相关:使用NSFileHandle这个类的seekToFileOfSet方法,来向文件中特定的位置写入数据。
04 技术相关
a.每个线程通过设置请求头下载文件中的某一个部分
b.通过NSFileHandle向文件中的指定位置写数据

你可能感兴趣的:(文件下载)