IOS没有办法取消所有网络请求(iOS any way to cancel all network

2019-10-17 22:21发布

我做的是应用程序的更新模组。 我想要做的是:

如果有一个新版本检测,提示用户更新,并在同一时间,取消所有的网络请求,如果有。 该请求可由AFNETWORK创建,可以像[:returningResponse:错误:NSURLConnection的sendSynchronousRequest]创建的,所有种类的网络请求,只是取消了他们。 我可以吗?

Answer 1:

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

更好的方法是使用NSOperationQueue和对象的NSOperation添加到队列中发起的网络连接。 或者,您可以创建的NSOperation的子类,并让每个实例观察其自定义事件通知cancel方法为目标。 通过这种方法,你只需要发布的自定义通知触发取消您的操作及其关联的网络连接的所有实例。



Answer 2:

如果你正在使用AFHTTPClient那么你可以得到它的操作队列的保持并取消所有的操作就可以了。

但是,除非你把所有的名单NSURLConnection你已经创建的对象,我不知道的方式来简单地取消所有NSURLConnection对象。



Answer 3:

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

如果是这样的情况下,要做到这一点的最好办法是为你的应用程序的其他部分提供你的一部分,更新,可以打电话说的API“放弃一切!”。 这有几个优点:

  • 如果应用程序的其他部分开始使用BGNetworking(这将是比AFNetworking好得多,当谈到明年),你的更新代码仍然可以工作。
  • 它使应用程序的其他部分有机会做他们可能想要的清理工作。 例如,他们可能只是放弃了它,因为出现了错误的API调用,而不是重试。

我们认为,此更新组件不是一个,可以独立地设计应用程序的其余部分。



文章来源: iOS any way to cancel all network requests