为什么我的NSOutputStream在第一次写入后没有可用空间? (hasSpaceAvailable变为NO)

时间:2013-08-16 23:12:50

标签: iphone ios objective-c

使用NSOutputStream,我第一次就能完美地写出来。

以下是发送数据的方法:

- (NSInteger)sendVsCommand:(VsCommand *)command
{
    NSData *commandArray = [NSData dataWithData:[command getCommandArray]];
    NSLog(@"Space availiable: %d", [writeStream hasSpaceAvailable]);
    NSInteger result = [writeStream write:[commandArray bytes] 
                                maxLength:[commandArray length]];
    NSLog(@"Writing result: %d", result);
    return result;
}

以下是对事件的处理:

case NSStreamEventHasSpaceAvailable:
            NSLog(@"%@ can accept bytes", aStream);
            if (aStream == writeStream) {
                NSLog(@"Can send data: %d", [writeStream hasSpaceAvailable]);
            }
            break;

无论如何只是重要的“案例”。

以下是控制台中的结果:

2013-08-16 18:07:12.769 hMonitor[5765:307] <__NSCFInputStream: 0x148650> is open
2013-08-16 18:07:12.776 hMonitor[5765:307] <__NSCFOutputStream: 0x148330> is open
2013-08-16 18:07:12.777 hMonitor[5765:307] <__NSCFOutputStream: 0x148330> can accept bytes
2013-08-16 18:07:12.779 hMonitor[5765:307] Can send data: 1
2013-08-16 18:07:13.107 hMonitor[5765:307] <__NSCFInputStream: 0x148650> has bytes
2013-08-16 18:07:13.112 hMonitor[5765:307] Space availiable: 1
2013-08-16 18:07:13.116 hMonitor[5765:307] Writing result: 41
2013-08-16 18:07:13.118 hMonitor[5765:307] <__NSCFOutputStream: 0x148330> can accept bytes
2013-08-16 18:07:13.119 hMonitor[5765:307] Can send data: 1
2013-08-16 18:07:13.687 hMonitor[5765:307] <__NSCFInputStream: 0x148650> has bytes
2013-08-16 18:07:15.343 hMonitor[5765:307] Space availiable: 0
2013-08-16 18:07:15.345 hMonitor[5765:307] Writing result: 0
  1. 正如你所看到的,当溪流打开时,我可以写得很好(可以 发送数据:1)。

  2. 然后我收到一些数据,并立即写回复,Space 可用:1和写作结果:41。

  3. OutputStream几乎可以立即再次写入,可以发送 数据:1(但我不需要发送任何内容,直到用户提出 一些选择)。我很快得到了答复。

  4. 最后,我再次尝试写(2秒钟之后,因为那是时候 用户已做出选择)。但是,现在可用的空间是 NO,写入结果为0.

  5. 有什么想法吗?你在哪里推荐我应该看看?

    提前致谢。

1 个答案:

答案 0 :(得分:0)

我的指针变得无效,因为我没有以正确的方式处理它们。

只是为了展示我在Objective-C中的绿色。