iOS:应用程序在尝试关闭流时挂起

iOS: App is hanging when trying to close the stream

我创建了 NSStreams 以使用以下代码传输内容:

dispatch_async(dispatch_get_main_queue(), ^{
    // open input
    [self.inputStream  setDelegate:controller];
    [self.inputStream  scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [self.inputStream  open];

    // open output
    [self.outputStream setDelegate:controller];
    [self.outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [self.outputStream open];
});

有时,我想使用以下代码关闭流:

    // Shut down input
    [self.inputStream close];
    self.inputStream = nil;

    // Shut down output
    [self.outputStream close];
    self.outputStream = nil;

    NSLog(@"input streams status:%i", [self.inputStream streamStatus]);
    NSLog(@"output streams status:%i", [self.outputStream streamStatus]);
    NSLog(@"input streams status:%@", [self.inputStream streamError]);
    NSLog(@"output streams status:%@", [self.outputStream streamError]);

所有 input/output 流都是强大的属性。

流状态 return 为零,但我的应用挂起。当我将设备置于调试模式时,监视器显示我的设备 CPU 在调用关闭方法后以 98+% 启动 运行。好像在等待什么结束,但我还是不知道那是什么。

有谁知道可能导致此问题的原因吗?

尝试从 运行 循环中删除流。

// Shut down input
[self.inputStream close];
[self.inputStream removeFromRunLoop: [NSRunLoop currentRunLoop] forMode: NSDefaultRunLoopMode];
self.inputStream = nil;

// Shut down output
[self.outputStream close];
[self.outputStream removeFromRunLoop: [NSRunLoop currentRunLoop] forMode: NSDefaultRunLoopMode];
self.outputStream = nil;

可以找到更多信息 here