我制作了一个应用程序,用于NSStream
建立与 telnet 服务器的连接。建立连接后,我发送第一个命令。然后我sleep(1);
用来让我的应用程序等待。然后发送第二个命令。
问题是整个 GUI 在sleep()
. 我知道这不是“暂停”的“完美”方式,我想学习如何正确地做到这一点。我听说了一些好事,NSTimer
但我想有一种具体且“简单”的使用方式,以简单地替换我对sleep()
.
我制作了一个应用程序,用于NSStream
建立与 telnet 服务器的连接。建立连接后,我发送第一个命令。然后我sleep(1);
用来让我的应用程序等待。然后发送第二个命令。
问题是整个 GUI 在sleep()
. 我知道这不是“暂停”的“完美”方式,我想学习如何正确地做到这一点。我听说了一些好事,NSTimer
但我想有一种具体且“简单”的使用方式,以简单地替换我对sleep()
.
您应该能够使用用于建立连接的任何过程注册某种回调。只需让您的代码等待该回调,而无需执行任何操作。
在这种情况下,使用NSStream
,您需要在运行循环上安排流:
[stream scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
运行循环是为您的应用程序处理事件的构造。当您使用sleep()
时,它会停止,您的 GUI 无法执行任何操作。通过将流作为输入添加到运行循环,您可以让它们继续工作。
您还必须设置一个委托对象([stream setDelegate:self];
例如),该对象将在流有要报告的内容时接收通知。该委托必须实现stream:handleEvent:
,它将通过对流的引用和指示发生了什么的代码来调用。