我还没有找到任何体面的文档来解释 NSStream 的线程处理过程。具体来说,让我们使用 NSInputStream。Objective-C 中的线程对我来说目前是一个谜,因为它看起来很简单。
我的问题主要是指这一行:
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
您可以指定输入流将在其中运行的运行循环,我认为这很酷。问题是,如果我希望输入和输出流在它们自己的线程中运行,并且两者都在一个类中实例化,比如 Connection,那么你如何让它们在它们自己的线程中运行?
我问的原因是因为代表。以前我们会这样做[inputStream setDelegate:self]
,这意味着我们必须声明stream:handleEvent
处理传入/传出数据。
所以最终我的问题是,如果你有一个设置输入和输出流的类,你如何将每个流线程化并将处理流事件的责任委托给当前类?
这里有一些代码可供选择:
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
我在想以下几点:
- 您不能将责任委派给当前类中的两个线程,您必须委派给单独的对象。
- 一个线程可以同时处理两个流?(我个人不这么认为,因为输入/输出会同时运行)
- 我想错了,您可以创建一个单独的运行循环并针对某个单独的线程调用 scheduleRunLoop 吗?
有任何想法吗?