在等待NSStream响应时将呼叫替换为休眠

时间:2012-05-14 00:09:26

标签: objective-c macos cocoa nsstream

我创建了一个使用NSStream来建立与telnet服务器连接的应用程序。 建立连接后,我发送第一个命令。然后我使用sleep(1);让我的应用程序等待。然后发送第二个命令。

问题是整个GUI在sleep()期间卡住了。我知道这不是“完美”的方式来“暂停”,我想学习如何正确。我听到了关于NSTimer的好消息,但是我希望有一种具体且“简单”的方式来使用它,简单地取代我对sleep()的不良使用。

1 个答案:

答案 0 :(得分:1)

您应该能够使用您用于建立连接的任何程序注册某种回调。只需让你的代码等待回调而不做任何事情。

在这种情况下,使用NSStream,您需要schedule the stream on the run loop

[stream scheduleInRunLoop:[NSRunLoop currentRunLoop]
                  forMode:NSDefaultRunLoopMode];

运行循环是处理应用程序事件的构造。当您使用sleep()时,它会被停止,您的GUI无法执行任何操作。通过将流添加为运行循环的输入,您可以让它们继续工作。

您还必须设置一个委托对象(例如[stream setDelegate:self];),该对象将recieve notifications when该流有报告的内容。该委托必须实现stream:handleEvent:,它将通过对流的引用和指示发生的事件的代码进行调用。