gpt4 book ai didi

ios - 我如何等待 NSStream 打开或失败?

转载 作者:可可西里 更新时间:2023-11-01 17:10:05 30 4
gpt4 key购买 nike

目前,当我打开一个 NSInputStream(例如)时,我可以将其设置为获取一个事件,指示它已完全打开。但如果失败,则根本没有事件。我从来没有被告知开幕式未能完成。我可以在它尝试打开时进行轮询,但随后我必须占用一个线程可能很长一段时间。

我想做的是编写高效的代码来等待流打开或打开失败。有没有这样的方法使用 NSStream 等?

我还想过创建一个我可以等待一段时间的事件。如果连接成功,该事件将发出信号并使我退出等待状态。如果发生超时,我可以测试状态,看看它是否失败或再次回到等待状态。但这当然是 B 计划,既不 Eloquent 又不高效。并且查看 CocoaTouch 文档根本不清楚如何创建这样一个我可以等待超时的信号。

如有任何帮助,我们将不胜感激。

最佳答案

NSStream 打开失败时会发生一个事件:NSStreamEventErrorOccurred。也许您遇到的问题是 TCP/IP 超时可能会很长。因此,如果与主机的连接将要失败,则可能需要 30 秒才能收到此事件。

您可以同时启动一个 NSTimer 以在更短的时间间隔内打开流,但是您会遇到该时间间隔应该是多少的问题?

将取消连接的选项留在用户手中通常会更好,除非发生 TCP/IP 超时。

我在许多项目中所做的是在大约 1 秒后弹出一个带有事件指示器和取消按钮的自定义模态视图。本地网络上的许多连接将在此时间之前完成,用户不会被弹出窗口打扰。对于较慢的连接,这允许用户决定他们愿意等待多长时间。您甚至可以在较长一段时间后更新模态视图中的消息,说明连接时间比平时更长,这样他们就知道程序知道他们正在等待!

关于ios - 我如何等待 NSStream 打开或失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11734414/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com