如何在注销期间取消所有 NSMutableURLRequest?
Posted
技术标签:
【中文标题】如何在注销期间取消所有 NSMutableURLRequest?【英文标题】:How can I cancel all the NSMutableURLRequest during logout? 【发布时间】:2016-06-23 15:52:29 【问题描述】:我正在使用NSMutableURLRequest
向服务器发出 HTTP 请求。现在由于网络速度较慢,需要一些时间才能获得响应,并且在这之间我想从我的应用程序中注销。由于多个请求已经在logout
之前发送到服务器,它会带来一些来自服务器的响应。我已经从应用程序中注销,所以我don't want to process those response
并想cancel all the pending request
队列中的所有内容。
那么如何在注销后停止获得所有响应?我应该使用一些标签logout
并检查它吗?
代码片段:-
+(void) httpRequestWithUrl:(NSString *)path onComplection:(RequestCompletionHandler)complect
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:path]];
[request setHTTPMethod:@"GET"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
NSOperationQueue *backgroundQueue = [[NSOperationQueue alloc]init];
[NSURLConnection sendAsynchronousRequest:request
queue:backgroundQueue
completionHandler:^(NSURLResponse *response,NSData *data,NSError *error)
NSString *result = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
if(complect)
complect(result,error);
];
编辑:-
What about AFNetworking ?
【问题讨论】:
您可以使用某种支持取消的包装类或使用您提到的会话/注销标签。 你在使用 NSURLSession 吗?这可以取消。请向我们展示一些代码,以便我们了解您是如何应用 URLRequest 的。 您可以使用[connection cancel];
或取消this answer 中所述的AFNetworking 请求。值得注意的是,您不能取消 请求,只能取消 URL 连接 或 数据任务。
检查这个:[NSObject cancelPreviousPerformRequestsWithTarget:self];
您可以将所有NSURLConnection
对象存储在一个数组中,然后调用[array makeObjectsPerformSelector:@selector(cancel)]
。但可能更清洁/更好地使用操作队列(或 AFNetworking,它已经为您完成了所有这些工作)
【参考方案1】:
我会推荐使用 NSURLSession 而不是 NSURLConnection。它是专门为使这更容易而设计的。创建单个会话,当用户注销时,对现有会话调用 invalidateAndCancel(然后在单独的会话中注销)。
真的,此时基于 NSURLConnection 编写新代码的唯一正当理由是为了支持 ios 6 及更早版本/OS X v10.8 及更早版本,并且听起来您正在编写新代码,所以...请使用更现代的 API。
【讨论】:
以上是关于如何在注销期间取消所有 NSMutableURLRequest?的主要内容,如果未能解决你的问题,请参考以下文章
注销时取消订阅所有订阅#Quickblox APNS & APNS.VOIP