如何为NSURLConnection请求设置实际超时?

时间:2011-08-26 17:58:28

标签: iphone nsconnection

请查看以下代码:

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请求的功能?
  3. 非常感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

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

  2. 如果您想异步取消请求(即在后台执行请求并允许前台UI线程发出取消以响应用户点击取消或停止按钮),那么您必须发出异步URL请求。使用同步请求无法执行此操作。例如,在当前正在执行块时,您甚至无法终止调度队列。

  3. 您可能希望查看ASIHTTPRequest,它有点不同地包含了一些此功能。

答案 1 :(得分:2)

超时间隔仅描述连接在超时之前的任何时刻可以空闲的时间。来自Apple文档:

  

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

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

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