NSMutableData からの NSInputStream 読み取りで NSStreamEventEndEncountered を通知する方法
-
13-09-2019 - |
質問
Cocoa では、プロデューサとコンシューマの 2 つの NSThread をセットアップしました。プロデューサはデータを NSMutableData に追加し、レシーバはそのデータから NSInputStream を開いてチャンクを読み取ります。
プロデューサ スレッドはコンシューマ プロセスよりもはるかに高速に書き込みますが、これは問題ありません。しかし、プロデューサーは限られた量の仕事を生産するだけで、その後終了します。コンシューマ スレッドで NSStreamEventEndEncountered イベントを処理できるようにしたいと考えています。NSInputStream が NSMutableData からのものである場合、これをどのように通知すればよいでしょうか?
プロデューサーに、ストリームの終了を示す魔法の番号を含む一連のバイトを送信させるだけでよいでしょうか?
解決
プロデューサはデータを NSMutableData に追加し、レシーバはそのデータから NSInputStream を開いてチャンクを読み取ります。
それはうまくいきません。から の -initWithData:
ドキュメンテーション:
の内容
data
コピーされます。
つまり、データを追加するときにデータ オブジェクトの内容に従うのではなく、その時点でデータ オブジェクト内にあるものをコピーします。
(同じことが当てはまります +inputStreamWithData:
.)
試してみてください パイプ その代わり。
所属していません StackOverflow