我还没有找到任何好的文档来解释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吗?
currentRunLoop
,则会获取当前线程的runloop。 - Ol Sen