• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - NSURLConnection 超时后卡住

[复制链接]
菜鸟教程小白 发表于 2022-12-13 02:44:36 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

遇到了NSURLConnection的问题,花了3天多的时间才找到解决办法 但不幸的是,我没有得到一个。 这是我的代码,这是在一个专门的类中,并使用 completehandler 返回

    NSURL *myUrl = [NSURL URLWithString:targetSite];
    NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:myUrl
                                                              cachePolicy:NSURLRequestReloadIgnoringCacheData
                                                          timeoutInterval:timeOutInterval];
    [urlRequest setHTTPMethod"OST"];
    [urlRequest setHTTPBody:MYBODYCONTENT];
    conn = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];
    if(conn)
    {
        webData = [NSMutableData data];
    }

并使用委托(delegate)接收数据,它在“didReceiveResponse”、“didReceiveData”、“didFailWithError”、“connectionDidFinishLoading”、...中工作正常。

但是,如果发生请求超时,(我已经在“didFailWithError”中[conn cancel])
然后,在一段时间内(我没有做精确的计数,而是大约 1 分钟) 我对同一服务器的所有新请求(再次请求)将一次又一次地超时。
是不是我做错了什么?
或者我应该修改我的代码吗?
我已经尝试了很多解决方案,但仍然没有成功。
所以,寻求帮助,谢谢。



Best Answer-推荐答案


一个常见的问题是,如果你发起许多NSURLConnection请求,它只能同时运行一定的数量(通常是4个或5个)。因此,如果您启动的次数不止这些,它一次只能运行其中的几个,而所有其他的都将被积压,等待其中一个插槽可用。可悲的是,如果这需要超过一分钟,后面的请求可能会超时。

对此的一种解决方案是将您的 NSURLConnection 对象包装在自定义 NSOperation 子类中。然后,您可以将它们添加到 NSOperationQueue 中,而不是一次启动所有连接,让操作队列决定何时启动它们。所以,如果你定义该队列的maxConcurrentOperationCount 为4 或5,那么操作队列将不会尝试同时启动它们,解决NSURLConnection 超时问题。

有关如何为并发操作子类化 NSOperation 的背景知识,请参阅 Concurrency Programming Guide: Operation Queues为并发执行配置操作部分.见 https://stackoverflow.com/a/24943851/1271826用于在 NSOperation 子类中包装 NSURLConnection 对象的演示。

更好的是,如果您不想在这里迷失细节,请考虑使用 AFNetworking ,它使用操作队列解决方案(至少对于 AFHTTPRequestOperationManager)。只需确保将管理器的操作队列的 maxConcurrentOperationCount 设置为 4,然后可以根据需要添加任意数量的网络操作,操作队列将确保它们不会超时。

关于ios - NSURLConnection 超时后卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26499079/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap