我正在做应用程序更新模块。我想做的是:
如果有更新版本检测,提示用户更新,如果有,则取消所有网络请求。请求可能是AFNETWORK创建的,也可能是[NSURLConnection sendSynchronousRequest:returningResponse:error:],各种网络请求,全部取消即可。我可以吗?
我正在做应用程序更新模块。我想做的是:
如果有更新版本检测,提示用户更新,如果有,则取消所有网络请求。请求可能是AFNETWORK创建的,也可能是[NSURLConnection sendSynchronousRequest:returningResponse:error:],各种网络请求,全部取消即可。我可以吗?
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error
无法取消使用创建的连接。如果您从后台线程调用它,您可能能够杀死线程本身。
更好的方法是使用 NSOperationQueue 并从添加到队列中的 NSOperation 对象启动网络连接。或者,您可以创建 NSOperation 的子类,并让每个实例以它的cancel
方法作为目标来观察自定义事件通知。使用这种方法,您只需发布自定义通知即可触发对您的所有操作实例及其相关网络连接的取消。
在评论中,OP 说他想要这样做的原因是因为他担心应用程序的其他部分会尝试访问不再可用的网络 API。
如果是这种情况,最好的方法是让您的应用程序的其他部分提供一个 API,您的部分(更新程序)可以调用该 API 来说“中止一切!”。这有几个优点:
听起来这个更新程序组件不能独立于应用程序的其余部分进行设计。
如果您正在使用,AFHTTPClient
那么您可以获取其操作队列并取消对其的所有操作。
但是,除非您拥有NSURLConnection
已创建的所有对象的列表,否则我不知道有一种方法可以简单地取消所有NSURLConnection
对象。