【问题标题】:Scheduling stream on NSRunLoop在 NSRunLoop 上调度流
【发布时间】:2014-12-15 16:45:14
【问题描述】:

我一直在关注本教程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];

一切都会正常工作。我真的不明白为什么我必须在主运行循环上安排这个?

正如我所见,主线程上发生的所有事情都在这个运行循环中处理。因此,如果我按下按钮,它将在主运行循环中处理。在这里,如果我没有在主运行循环上安排这个,字节仍然会被接收和发送,所以对我来说这意味着它们是在主运行循环上处理的。

【问题讨论】:

    标签: ios sockets nsrunloop nsinputstream nsoutputstream


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多