1

请查看以下代码:

NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:<...> cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:3.0]; 
<...>
[NSURLConnection sendSynchronousRequest:request returningResponse:&WSresponse error:&WSerror]

下面的代码是从后台线程调用的:

[self performSelectorInBackground:@selector(<...>) withObject:nil];

有时 sendSynchronousRequest 的工作时间远远超过 3.0 秒。(大约 1 分钟)。

  1. 如何设置真正的超时而不是不工作timeoutInterval:3.0
  2. 如何为用户添加随时NSURLConnection通过取消按钮停止冻结请求的功能?

非常感谢您的帮助!

4

2 回答 2

3
  1. 请注意,除了您调用的初始化程序之外,您还可以在 NSMutableURLRequest 上调用 -setTimoutInterval:。超时值确实有效,但任何小于 240 的值都会被忽略——这是 iOS 框架所遵循的最小值。如果您想设置较低的超时值,那么您唯一的选择就是使用异步请求。

  2. 如果您想异步取消请求(即,在后台执行请求并允许前台 UI 线程发出取消以响应用户点击取消或停止按钮),那么您必须发出异步 URL 请求。没有办法通过同步请求来做到这一点。例如,您甚至不能在调度队列当前正在执行一个块时杀死它。

您可能想查看 ASIHTTPRequest,它以不同的方式封装了其中的一些功能。

于 2011-08-26T18:52:17.203 回答
2

超时间隔仅描述了连接在超时之前可以在任何时间处于空闲状态的时间量。从苹果文档:

如果在连接尝试期间请求保持空闲的时间超过超时间隔,则认为请求已超时。

因此,如果您的数据正在检索大量数据,则需要更长的时间。

如果您想更好地控制“停止收听”之前等待的时间,那么您应该使用异步请求。异步请求也会使用户在等待时看不到冻结?

于 2011-08-26T18:12:07.667 回答