我创建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 +%运行。它似乎在等待某些事情要完成,但我仍然不知道那是什么。
有谁知道可能导致这个问题的原因?
答案 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。