scfhao / SODownloader

A simple downloader base on AFNetworking

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

当任务直接删除的时候,虽然会把resumeData(.download)文件清空,但是.tmp文件却没有清除

LinJiaXing1102 opened this issue · comments

当我们启动一个任务之后,暂停、取消或暂停再取消该任务的时候,该框架会调用cancelByProducingResumeData来进行存储已经下载好的resumeData,并将其写入指定文件夹(文件以.download结尾),但是与于此同时AFNetworking中的NSURLSession也会随着cancelByProducingResumeData生成一个tmp文件(CFNetworkDownload_cWZiWj.tmp 大概是这命名,后来发现是下载中的文件)。

若我们在任务进行的时候,暂停再取消、直接取消该任务的时候,框架会删除掉.download文件,却不会删除.tmp文件,而且.tmp文件也是挺大的(根据下载任务的大小决定)

发现直接调用downloadTask的cancel方法可以移除.tmp文件,但是调用了cancelByProducingResumeData,再调用cancel是无效的。

还是说这个可以不用考虑?

查到的资料显示 tmp文件夹系统会在你关闭app后自动清除,app更新后会被清除

虚拟机是没有这个效果啦,真机还没试过。。。

我认为程序没有必要主动删除tmp文件夹中的文件,正在下载中的文件是暂时保存在tmp文件夹下的,可以肯定的是系统会确保在App运行时不删除属于该App的tmp文件夹中的内容,当然关闭App后系统也不会自动清理,只有在需要清理(这个时机是由系统确定的)的时候这个文件夹中的内容才会被清理。

resumeData是一个字典序列化后的数据,这个字典中保存了下载相关的信息,其中也包括了对应的tmp文件的位置。resumeData有独立的版本(即NSURLSessionResumeInfoVersion),在版本1时,可以根据NSURLSessionResumeInfoLocalPath拿到 tmp 文件的完整路径,在后续几个版本中,只能通过NSURLSessionResumeInfoTempFileName拿到 tmp 文件的文件名,然后自行拼接得到完整的 tmp 文件路径,所以在目前的 iOS 版本上是可以做到 App 主动删除 tmp 文件的,但这个逻辑在后续的 iOS 版本上是否有效就无法得到保证了。

👌