我创建了一个使用NSStream
来建立与telnet服务器连接的应用程序。
建立连接后,我发送第一个命令。然后我使用sleep(1);
让我的应用程序等待。然后发送第二个命令。
问题是整个GUI在sleep()
期间卡住了。我知道这不是“完美”的方式来“暂停”,我想学习如何正确。我听到了关于NSTimer
的好消息,但是我希望有一种具体且“简单”的方式来使用它,简单地取代我对sleep()
的不良使用。
答案 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:
,它将通过对流的引用和指示发生的事件的代码进行调用。