iOS以任何方式取消所有网络请求

时间:2013-04-02 03:38:38

标签: ios objective-c nsurlconnection afnetworking

我在做应用更新模块。我想做的是:

如果有更新的版本检测,则提示用户同时更新AND,如果有则取消所有网络请求。该请求可能由AFNETWORK创建,可能像[NSURLConnection sendSynchronousRequest:returningResponse:error:],所有类型的网络请求一样创建,只需将它们全部取消即可。我可以吗?

3 个答案:

答案 0 :(得分:1)

无法取消使用+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error创建的连接。如果你从后台线程调用它,你可以杀死线程本身。

更好的方法是使用NSOperationQueue并从添加到队列的NSOperation对象启动网络连接。 (可选)您可以创建NSOperation的子类,并使每个实例都以cancel方法作为目标来观察自定义事件通知。使用这种方法,您只需发布自定义通知即可触发对所有操作实例及其关联网络连接的取消。

答案 1 :(得分:0)

如果您使用的是AFHTTPClient,那么您可以暂停其操作队列并取消其上的所有操作。

但是,除非您有一个已创建的所有NSURLConnection个对象的列表,否则我不知道如何简单地取消所有NSURLConnection个对象。

答案 2 :(得分:0)

在评论中,OP说他之所以这样做是因为他担心应用程序的其他部分会尝试访问不再可用的网络API。

如果是这种情况,最好的方法是让应用程序的其他部分提供一个API,您的部分(更新程序)可以调用它来说“中止所有内容!”。这有几个好处:

  • 如果应用程序的其他部分开始使用BGNetworking(明年推出时会比AFNetworking好得多),您的更新程序代码仍然有用。
  • 它为应用程序的其他部分提供了进行任何清理操作的机会。例如,他们可能只是放弃API调用而不是重试它,因为出了问题。

听起来这个更新程序组件不是可以独立于应用程序其余部分设计的组件。