Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
LinJiaXing1102 opened this issue May 9, 2018 · 3 comments

Comments

@LinJiaXing1102
Copy link

LinJiaXing1102 commented May 9, 2018

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

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

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

@LinJiaXing1102
Copy link
Author

LinJiaXing1102 commented May 9, 2018

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

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

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

@scfhao
Copy link
Owner

scfhao commented May 10, 2018

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

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

@LinJiaXing1102
Copy link
Author

👌

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants