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

时间:2016-10-24 19:49:24

标签: ios nsstream

我创建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]);

所有输入/输出流都是强大的属性。

流状态返回零,但我的应用程序挂起。当我将设备置于调试模式时,监视器显示我的设备CPU在调用close方法后开始以98 +%运行。它似乎在等待某些事情要完成,但我仍然不知道那是什么。

有谁知道可能导致这个问题的原因?

1 个答案:

答案 0 :(得分:0)

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

// 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