我想我的问题源于对iOS平台上不同线程上的网络通信如何完成的无知。我有一个TcpConnection
类,它是打印机的输入和输出流的包装。在Open
调用看起来是这样的:简单的iphone网络在不同的线程
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (CFStringRef) ipAddress, port, &readStream, &writeStream);
self.myInputStream = (NSInputStream*)readStream;
self.myOutputStream = (NSOutputStream*)writeStream;
CFRelease(readStream);
CFRelease(writeStream);
[self.myInputStream setProperty:(id)kCFBooleanTrue forKey:(NSString *)kCFStreamPropertyShouldCloseNativeSocket];
[self.myInputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[self.myInputStream open];
[self.myOutputStream setProperty:(id)kCFBooleanTrue forKey:(NSString *)kCFStreamPropertyShouldCloseNativeSocket];
[self.myOutputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[self.myOutputStream open];
的问题是与[NSRunLoop currentRunLoop]
通话。当我在不是主线程的线程中创建此TcpConnection对象时(通过使用detachNewThreadSelector
),我只能在该线程上与该连接进行通信。如果我尝试返回主线程,或将它传递给另一个线程,我无法获取任何数据。
但是,如果我安排输入/输出流在mainRunLoop
它工作正常。但是,这吓坏了我的裤子。我不知道那会做什么。这是否意味着所有的流通信都是在主线程上完成的?还有其他性能问题吗?我还没有发现任何网络通信安排在mainRunLoop
上的例子;这是否意味着我不应该这样做?当我尝试从多个线程与我的TcpConnection
对话时,我是否正确使用线程?
我看了Threading Programming Guide,但似乎没有解决这个问题。 任何帮助,将不胜感激