0

我的程序经常在以下行崩溃(访问错误):

int writeSize = [_outputStream write:pCopyOfDataBuff maxLength:sendLength];

pCopyOfDataBuff 是一个

pCopyOfDataBuff = new unsigned char [sendLength];

在崩溃行之前分配并填充堆栈上的数据。Context 是一个处理这个流的特殊线程。

当我在调试器中停止时,使用符号异常断点,我发现 _outputStream 实际上是关闭的。

[_outputStream close];

在主线程中关闭。现在这可能同时发生了。

我的问题:在多个线程中处理这样的 NSOutputStream 是否安全?我应该将所有对 NSStream 的调用同步到同一个线程吗?

谢谢。我在文档中找不到简单的答案。

4

1 回答 1

3

最近遇到了同样的问题。我发现主线程上的一些委托使用[myQueue cancelAllOperations]关闭操作队列并关闭连接,如下所示:

-(void)closeStream:(NSStream *)stream {
    [stream setDelegate:nil];
    [stream close];
    [stream removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
}

我的解释是,在写作过程中,[self.outputStream write:bytes maxLength:bytesRecieved];输出流被关闭了。

我通过等待 NSOperationQueue 完成来解决它:[myQueue waitUntilAllOperationsAreFinished]

希望这有助于解决您的问题。

于 2013-10-11T13:32:55.157 回答