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

Iphone 如何为NSURLConnection请求设置实际超时?,iphone,nsconnection,Iphone,Nsconnection,请参阅以下代码: NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:<...> cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:3.0]; <...> [NSURLConnection sendSynchronousRequest:request returningResponse:&WSrespons

请参阅以下代码:

NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:<...> cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:3.0]; 
<...>
[NSURLConnection sendSynchronousRequest:request returningResponse:&WSresponse error:&WSerror]
NSMutableURLRequest*request=[NSMutableURLRequest requestWithURL:cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:3.0];
[NSURLConnection sendSynchronousRequest:请求返回应答:&WSresponse错误:&WSerror]
下面的代码是从后台线程调用的:

[self performSelectorInBackground:@selector(<...>) withObject:nil];
[self-performSelectorInBackground:@selector(),对象:nil];
有时sendSynchronousRequest的工作时间远远超过3.0秒。(大约1分钟)

  • 如何设置实际超时而不是不工作
    timeoutInterval:3.0
  • 如何通过“取消”按钮随时向用户添加停止冻结
    NSURLConnection
    请求的功能

  • 非常感谢你的帮助

    超时时间间隔仅描述了连接在超时之前的任何时间点可以空闲的时间量。从Apple文档中:

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

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


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

    超时时间间隔只是描述了连接在超时之前的任何时间点可以空闲的时间量。从Apple文档中:

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

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

    如果您想对“停止侦听”之前的等待时间有更多的控制,那么应该使用异步请求。异步请求也会使它生效,以便用户在等待时不会看到冻结

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

  • 如果要异步取消请求(即,在后台执行请求,并允许前台UI线程发出取消以响应用户点击取消或停止按钮),则必须发出异步URL请求。用同步请求是无法做到的。例如,您甚至不能在调度队列当前正在执行块时终止它

  • 您可能想看看ASIHTTPRequest,它以稍微不同的方式包装了一些功能

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

  • 如果要异步取消请求(即,在后台执行请求,并允许前台UI线程发出取消以响应用户点击取消或停止按钮),则必须发出异步URL请求。用同步请求是无法做到的。例如,您甚至不能在调度队列当前正在执行块时终止它


  • 您可能想看看ASIHTTPRequest,它以稍微不同的方式包装了一些功能。

    谢谢您的回答!但我想添加一个取消按钮,随时停止请求。如何执行此操作?您可以在发出请求的NSURLConnection上调用cancel方法(假设您保存了对它的引用)。这将防止将来向您的代理发送任何回调。@Tim Deam-只有在主线程上调用同步IO时,“禁止冻结”注释才有效。在后台线程上,由于大大降低了代码复杂度,因此可以首选同步IO。@PeyloW-我同意您关于从后台线程使用同步表单的评论。基于最初的帖子,我假设它是从主线程调用的。这段代码是从后台线程调用的,而不是从主线程调用的。谢谢你的回答!但我想添加一个取消按钮,随时停止请求。如何执行此操作?您可以在发出请求的NSURLConnection上调用cancel方法(假设您保存了对它的引用)。这将防止将来向您的代理发送任何回调。@Tim Deam-只有在主线程上调用同步IO时,“禁止冻结”注释才有效。在后台线程上,由于大大降低了代码复杂度,因此可以首选同步IO。@PeyloW-我同意您关于从后台线程使用同步表单的评论。基于最初的帖子,我假设它是从主线程调用的。这段代码是从后台线程调用的,而不是从主线程调用的。