iOS/MacOSX には、いくつかのストリーミング関数やクラスがあります。独自のカスタム ストリーム、つまりデータの連続したバイトを提供または消費するオブジェクトを実装したい場合、次の API のうちどれを使用するのが最適でしょうか?
- Unixファイル記述子(int)
- カスタムファイル記述子を実装する方法はありませんか?
- ファイル*
- funopen を使用して独自のストリームを実装します。
- C レベルの API。実際にこれを使用している Cocoa は多くありません。たとえば、これを NSInputStream にブリッジすることはできません。
- データは独自のコードで使用できます
- CGDataProviderRef、CGDataConsumerRef
- 順次および直接アクセス読み取りの実装を許可します。
- CoreGraphics で使用されますが、それ以外には使用されません。
- 独自のコードからデータを使用することはできません
- NSInputStream、NSOutputStream
- XML、JSON 解析など、多くの Cocoa で使用されます
- Doc ではサブクラス化が可能ですが、非同期で使用されるため、実際のサブクラス化はトリッキーです。
- 独自のコードからデータを使用できます
NSInputStream/NSOutputStream は、独自のストリームを実装する理想的な「Cocoa」の方法のようです。ただし、App Store に適した、つまり非表示のメソッドをオーバーライドしない (例: http://bjhomer.blogspot.com.au/2011/04/subclassing-nsinputstream.htmlを参照)、NSInputStream のサブクラスを実装する方法がわかりません。および次のいずれか:
(a) 同期のみのストリームを作成する (特定の Cocoa API がストリームを非同期に消費するため、同期のみのストリームでは機能しないかどうかをどのように知ることができますか?) または
(b) 非同期ストリームを作成しますか?