用NSURLSessionreplaceNSURLConnection
我一直在为NetworkCommunication
开始一个devise。 我有一个devise在NSOperation
子类创build和pipe理自己的NSURLConnection
。 NSOperation
子类由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
类不应再使用。NSURLSession
是NSURLConnection
的替代品。
我原来的答案如下。
答案取决于你是否需要各种NSURLSession
委托方法的丰富性。 如果可以使用完成块再现(即没有进度callback,没有stream等),从NSURLConnection
到NSURLSession
的转换是相当简单的。 只要把你的NSURLSession
实例放在你的NetworkManager
类中,然后把基于委托的NSURLSessionTask
实例包装在并发的NSOperation
子类中,就完成了。 只要采用标准的asynchronous/并发NSOperation
子类模式。
如果您使用的是基于委托的NSURLSession
,那么它就是一个完全不同的水壶。 主要的麻烦是在会话delegate
上调用各种NSURLSessionTask
委托方法,而不是任务委托对象。 乍一看,这可能听起来像是一个微不足道的问题,但是,如果你的操作实例有独特的完成/进度块,例如,你坚持如何让会话对象映射这些委托方法callback个人的麻烦原始请求操作实例。
要解决这个问题,你必须保持任务标识符到你的NSOperation
子类对象的映射。 然后,您可以在相应的NSOperation
子类中实现这些NSURLSessionTask
(包括任务,下载任务和上载任务)委托方法。 NSURLSession
networkingpipe理器类可以在接收到NSURLSessionTask
委托调用时使用任务标识符来标识合适的NSOperation
实例,然后在那里调用相应的委托方法。
最后,如果你打算处理后台的NSURLSession
实例,生活变得更加困难(因为后台任务将会继续,即使你的应用已经终止,并且所有的对象都被丢弃了)。 背景会议根本不适合NSOperation
基于NSOperation
的方法。
底线,如果您只需要完成块NSURLSession
方法,这是微不足道的,但如果您需要基于委托的演绎,那么这有点麻烦。