简单易用、功能丰富的纯 Swift 下载框架
修复可能出现死循环的问题
修复 success 重复调用
之前 Tiercel 3.0.0 版本已经针对批量操作进行大量优化,足以应付数百个下载任务批量操作的需求。但我万万没想到竟然有人会在手机端上同时下载成千上万的文件,显然这种做法是不正确的,手机的性能非常有限,就算是性能很好的电脑,也不应该这么做。正常来说如果同时下载的文件达到上百个的话,最好就把它们压缩成一个文件进行下载,节省大量的资源,这才是最优的做法。但既然有开发者发现 Tiercel 在批量操作时还是会产生性能方面的问题,那也证明了它还存在继续优化的空间,于是我再次对批量操作方面进行优化,达到了应付上万个下载任务批量操作的要求。但我还是再次强调,这种大量文件同时下载的做法是非常不合理的,对于 Tiercel 使用的常见问题和注意事项,请查看 常见问题
URLSessionDownloadTask
,如果下载任务出现错误,会保留 response
error
和 response
进行持久化SessionManager
的 download
和 multiDownload
方法添加了回调UnfairLock
和 Protector<T>
,新增 Debouncer
,方便开发者使用resumeData
引起的 BugDownload
和SessionManager
的状态通知,使用方法请看 Wiki
multiDownload(_:headersArray:fileNames:)
返回值问题Tiercel 3.0 大幅提高了性能,拥有更完善的错误处理,提供了更多方便的 API。从 Tiercel 2.0 升级到 Tiercel 3.0 并不会很困难,强烈推荐所有开发者都进行升级,具体请查看 迁移指南
multiDownload(_:headersArray:fileNames:)
、totalSuspend(onMainQueue:handler:)
、totalCancel(onMainQueue:handler:)
、totalRemove(completely:onMainQueue:handler:)
等批量操作的速度fetchTask(_:)
方法的性能os_unfair_lock
进行线程同步TiercelLog
改成struct Logger: Logable
,开发者可以取消所有的默认打印,也可以自定义Logger
Cache
支持自定义下载模块的文件夹sessionManager.cancel(task)
completion(onMainQueue:handler:)
方法,把success(onMainQueue:handler:)
方法和failure(onMainQueue:handler:)
方法合并在一起,避免代码分隔controlExecuter
每次调用完毕后赋值为nil
,避免混乱Cache
的invalidate
方法,修复Cache
的内存泄漏Demo
中的代码这应该是 Tiercel 2 的最后一个版本,即将移除 NSCoding
的兼容代码,如果之前没有升级到 2.3.0
版本的使用者,请务必先升级到此版本作为过渡
DownloadTask
暴露 originalRequest
、currentRequest
、response
、statusCode
属性DownloadTask
完成后,会进一步判断statusCode
,只有200 <= statusCode < 300
才算成功,否则失败Codable
进行编码解码
NSCoding
存在安全隐患,不再使用,新版本会兼容旧版本的持久化数据。URLStirng
改为URLConvertible
,适应更多类型
String
,更加灵活方便,同样开发者无需修改任何代码即可以兼容。Task
不再暴露给外界,目前统一返回DownloadTask
SessionManager
时,可以传入自定义队列,Tierecl回调都在此队列中执行onMainQueue
参数控制回调是否在主队列上执行,如果onMainQueue
传false
,则会在SessionManager
初始化时指定的队列上执行