【问题标题】:Does -[NSInputStream read:maxLength:] block?-[NSInputStream read:maxLength:] 是否阻塞?
【发布时间】:2014-01-02 16:57:57
【问题描述】:

我似乎无法在任何地方找到答案,但NSInputStream 上的read:maxLength: 会阻塞直到数据可用或出现错误,或者我是否需要在尝试阅读之前轮询hasBytesAvailable ?

【问题讨论】:

    标签: cocoa-touch cocoa blocking nsinputstream


    【解决方案1】:

    是的,read:maxLength: 会阻塞,直到至少有一个字节可用,或者发生错误或流到达 EOS。它也会阻塞,直到流打开之后。

    您是否想要轮询,或者您是否可以接受阻塞,或者您是否想要实现流委托,这取决于您。推荐使用流代理。

    【讨论】:

    • 对我来说,它在 tcp 流上使用时会无限期地阻塞。具体来说,在确保所有流操作(如打开、关闭等)都在主线程上完成后,我仍然看到读取的线程被永远阻塞,即使在发出流关闭并设置为 nil 之后也是如此。
    猜你喜欢
    • 1970-01-01
    • 2020-09-16
    • 2011-04-09
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    相关资源
    最近更新 更多