用NSURLSessionreplaceNSURLConnection

我一直在为NetworkCommunication开始一个devise。 我有一个devise在NSOperation子类创build和pipe理自己的NSURLConnectionNSOperation子类由NetworkManger类实例化,该类将其添加到NSOperationQueue 。 一旦请求完成,委托(例如: ViewController将被调用)。 这是stream量:

networkingpipe理器实例化NSOperation子类(封装URL,参数等),并将其添加到它维护的NSOperationQueue 。 NSOperation子类实例化NSURLConnection (执行asynchronous请求并检索数据) NSURLConnection将数据转储到NSOperation-subclass NSOperation-subclass执行委托(视图控制器)提供的完成块。 我试图现在与NSURLSession实现相同的模式。 我希望能够封装在一个对象内进行networking请求所需的url和参数。

如果我使用相同的模式,如果我使用NSURLSession 。 我检查了AFNetworking类。 但是,他们没有为NSURLSession分类NSURLSession 。 而且,会话对象应该放在哪里。 它会成为NSOperationclass的一部分吗?

有人可以就此提供一些专家意见。 我应该可以取消请求,上传(POST / PUT),下载数据。 networkingpipe理员类将是任何networking请求的单一联系人。

更新:

NSURLConnection已被弃用有效的Mac OS 10.11和iOS 9.所以,此时NSURLSession应该用来代替NSURLConnection 。 正如NSURLConnection.h标题所示:

弃用: NSURLConnection类不应再使用。 NSURLSessionNSURLConnection的替代品。

我原来的答案如下。


答案取决于你是否需要各种NSURLSession委托方法的丰富性。 如果可以使用完成块再现(即没有进度callback,没有stream等),从NSURLConnectionNSURLSession的转换是相当简单的。 只要把你的NSURLSession实例放在你的NetworkManager类中,然后把基于委托的NSURLSessionTask实例包装在并发的NSOperation子类中,就完成了。 只要采用标准的asynchronous/并发NSOperation子类模式。

如果您使用的是基于委托的NSURLSession ,那么它就是一个完全不同的水壶。 主要的麻烦是在会话delegate上调用各种NSURLSessionTask委托方法,而不是任务委托对象。 乍一看,这可能听起来像是一个微不足道的问题,但是,如果你的操作实例有独特的完成/进度块,例如,你坚持如何让会话对象映射这些委托方法callback个人的麻烦原始请求操作实例。

要解决这个问题,你必须保持任务标识符到你的NSOperation子类对象的映射。 然后,您可以在相应的NSOperation子类中实现这些NSURLSessionTask (包括任务,下载任务和上载任务)委托方法。 NSURLSessionnetworkingpipe理器类可以在接收到NSURLSessionTask委托调用时使用任务标识符来标识合适的NSOperation实例,然后在那里调用相应的委托方法。

最后,如果你打算处理后台的NSURLSession实例,生活变得更加困难(因为后台任务将会继续,即使你的应用已经终止,并且所有的对象都被丢弃了)。 背景会议根本不适合NSOperation基于NSOperation的方法。

底线,如果您只需要完成块NSURLSession方法,这是微不足道的,但如果您需要基于委托的演绎,那么这有点麻烦。