Kez*_*zer 6 cocoa multithreading objective-c nsstream nsrunloop
我没有找到任何可以解释NSStream线程化过程的文档.具体来说,让我们去NSInputStream.在Objective-C中对我的线程目前是一个谜,因为它看起来如此简单.
我的问题主要是指这一行:
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
Run Code Online (Sandbox Code Playgroud)
您可以指定输入流将运行的运行循环,我认为这很酷.问题是,如果我希望输入和输出流在他们自己的线程中运行,并且两者都在单个类中实例化,比如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];
Run Code Online (Sandbox Code Playgroud)
我在想以下几点:
有任何想法吗?
小智 -3
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
{
switch (eventCode) {
case NSStreamEventNone:
break;
case NSStreamEventOpenCompleted:
break;
case NSStreamEventHasBytesAvailable:
[self _readData];
break;
case NSStreamEventHasSpaceAvailable:
[self _writeData];
break;
case NSStreamEventErrorOccurred:
break;
case NSStreamEventEndEncountered:
break;
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud)