在Cocoa/iOS/MacOSX中实现哪种流式API?

在Cocoa/iOS/MacOSX中实现哪种流式API?,ios,macos,cocoa,io,stream,Ios,Macos,Cocoa,Io,Stream,iOS/MacOSX中有两个流函数和/或类。如果我想实现自己的自定义流,即提供或使用连续字节数据的某个对象,那么最好使用以下哪种API Unix文件描述符(int) 无法实现自定义文件描述符 文件* 使用funopen实现自己的流 C级API,实际上并不是很多Cocoa都使用它。例如,无法将此连接到NSInputStream 数据可以由您自己的代码使用 CGDataProviderRef,CGDataConsumerRef 允许顺序和直接访问读取实现 用于CoreGraphics,但

iOS/MacOSX中有两个流函数和/或类。如果我想实现自己的自定义流,即提供或使用连续字节数据的某个对象,那么最好使用以下哪种API

  • Unix文件描述符(int)
    • 无法实现自定义文件描述符
  • 文件*
    • 使用funopen实现自己的流
    • C级API,实际上并不是很多Cocoa都使用它。例如,无法将此连接到NSInputStream
    • 数据可以由您自己的代码使用
  • CGDataProviderRefCGDataConsumerRef
    • 允许顺序和直接访问读取实现
    • 用于CoreGraphics,但不用于其他用途
    • 不能从您自己的代码中使用数据
  • NSInputStreamNSOutputStream
    • 许多Cocoa使用,例如XML、JSON解析
    • Doc允许子类化,但实际上,由于异步使用,子类化很棘手
    • 数据可以从您自己的代码中使用
NSInputStream/NSOutputStream似乎是实现您自己的流的理想“Cocoa”方式。但是,我不确定如何实现应用商店友好型,即不覆盖隐藏方法(参见示例)、NSInputStream的子类,以及:

(a) 创建一个仅同步的流(我如何知道特定的Cocoa API是否会异步使用流,从而无法使用我的仅同步流?)

(b) 创建异步流