iOS/MacOSX 中有几个流函数和/或类。如果我想实现自己的自定义流,即提供或使用顺序字节数据的某个对象,以下哪个 API 最适合使用?
- Unix文件描述符(int)
- 没有办法实现自定义文件描述符?
- 文件*
- 使用 funopen 实现自己的流。
- C 级 API,实际使用这个的 Cocoa 并不多。例如,不能将此桥接到 NSInputStream。
- 数据可以被你自己的代码消费
- CGDataProviderRef , CGDataConsumerRef
- 允许顺序和直接访问读取实现。
- 由 CoreGraphics 使用,但仅此而已。
- 无法从您自己的代码中使用数据
- NSInputStream , NSOutputStream
- 被很多 Cocoa 使用,例如 XML、JSON 解析
- Doc 允许子类化,但实际上由于异步使用,子类化很棘手。
- 可以从您自己的代码中使用数据
看起来 NSInputStream/NSOutputStream 是实现您自己的流的理想“可可”方式。但是我不确定如何实现对 App Store 友好,即不覆盖隐藏方法(参见例如http://bjhomer.blogspot.com.au/2011/04/subclassing-nsinputstream.html),NSInputStream 的子类,或者:
(a) 制作仅同步流(我如何知道特定的 Cocoa API 是否会异步使用流,因此不适用于我的仅同步流?)或
(b) 制作异步流?