A drop-in equivalent replacement for NSURLSession with better blocks support
行为应该与NSURLSession相同,因为所有实际工作都转发到一个内部的NSURLSession实例。唯一的区别是完成块和代理回调不是互斥的(与NSURLSession不同)。
不支持的唯一NSURLSession方法是sharedSession
,这在我看来说明它是个坏主意。
我喜欢NSURLSession。它使得简单的事情变得简单,困难的事情成为可能,这是好的,但一个伟大的API也不应该在出乎意料的方式下行为。不幸的是,NSURLSession有几个出乎意料的行为。第一个让我印象深刻的是,一旦你使用了方便的completionHandler
块,你就不再为这些任务得到代理回调。为什么?我不知道。它是有记录的,但我发现这是出乎意料的,也尴尬。completionHandler块不是直接替换代理方法,所以基本上是无用的。
通过一个类别可以实施一个明显的解决方案,但关于NSURLSession的另一个出乎意料的事情是它的类层次结构似乎在假装。比较文档和现实世界中对NSURLSessionDownloadTask的isKindOfClass
返回结果。NSURLSession也无法透明地被子类化,因为,在许多其他问题中,它的类方法不返回instancetype。
但我仍然喜欢NSURLSession API,它优雅地在简单和强大之间取得平衡。
因此,我决定用一个近透明滴答式包装器来封装NSURLSession,它会调用代理方法和completionHandler块。
这个版本甚至还不算0.0.1版本。
这是一个非常早期的发布。我只是用它执行简单的数据任务和下载任务,YMMV。
请提交错误报告和pull请求。
我计划通过添加额外的便利方法和带有进度完成回调块的附加进度回调来简单地扩展块支持,以消除简单情况中代理的需求。