可以将在主线程上调度的打开但非活动的NSStream移动到其他线程吗?

时间:2012-05-24 14:53:57

标签: objective-c ios nsthread nsrunloop nsstream

我正在使用(并且需要使用)我没有来源的第三方框架。第三方框架处理创建经过身份验证的客户端/服务器连接并回送一对打开的NSStream。我遇到的挑战是NSStreams安排在主线程上(创建UI可能无响应的情况 - 我想避免)。

当流从第三方框架切换时,没有网络流量正在进行中。所以,我想知道我是否可以取消安排和重新安排NSStreams。

有没有人知道是否有可能取消安排打开的NSStream并在另一个线程上的另一个运行循环上重新安排它?这会引起问题吗?那里有代码示例吗?

提前致谢!

亚伦

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的应用程序,则意味着您的应用程序接收对特定流的引用,并且您负责阅读所有流程。读取这些流应该是通过NSThread,NSOperation或其他线程机制从应用程序强制进入后台的。

示例:

在这个NSInputStream中绑定的任何文件中:

@property (strong, nonatomic) NSInvocationOperation *parseOp; 

(id)startInputRead:(NSInputStream *)input {
    if([input hasBytesAvailable]) {
        self.parseOp = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(readAndStoreInput:) object:inputStream];

    }

你的读者是这样的:

(void)readAndStoreInput:(NSInputSteam*) input{
     //process your input steam into your system in the background

}

这是一个简短的例子,说明如何为输入端执行此操作。您也可以以类似的方式排队输出蒸汽的工作。这应该使所有内容同时运行,并且您的应用程序保持响应。