我一直在学习http://www.raywenderlich.com/3932/networking-tutorial-for-ios-how-to-create-a-socket-based-iphone-app-and-server教程,并且一切正常,但是我看不懂其中的一行内容:



但是,如果我在代码中注释了以下几行:

//[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
//[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

一切仍然可以正常工作。我真的不明白为什么我必须在主运行循环中安排它?

如我所见,主线程上发生的所有事情都在此运行循环中处理。因此,如果我按下按钮,它将在主运行循环中处理。在这里,如果我不计划在主运行循环上执行此操作,则仍然会接收和发送字节,因此对我来说,这意味着它们会在主运行循环上进行处理。

最佳答案

您可以在任何所需的运行循环中调度流。委托(delegate)的回调方法将在安排了线程的此类线程中调用。例如,我为POSInputStreamLibrary编写了一些单元测试,其中我的委托(delegate)在某个工作线程中接收事件。您可以看到调度过程here

09-27 19:23