ネットワーク経由で相互に接続されているデバイス間で2 つがNSInputStream
あります。NSOutputStream
に何かを書き込むと、イベントが発生するoutput stream
までデータが書き込まれ ます。NSStreamEventEndEncountered
出力ストリームを閉じますが、反対側 ( input stream
) ではNSStreamEventEndEncountered
、 のビュー コントローラーを終了するまで、イベントは発生しませんoutput stream
。1.で同じことが発生した後でも、 でイベントが発生
しないのはなぜですか? (このイベントでは、出力ストリームも閉じられます)
2. を一度開くと、データを書き込むことができるのは 1 回だけであると理解しています。イベント後に再度開くことはできません (たとえば、イベントに何か新しいものを書き込むため)。NSStreamEventEndEncountered
input stream
output stream
NSOutputStream
output stream
NSStreamEventEndEncountered
1 に答える
あなたの接続とデータの送信方法についてもっと情報が必要かもしれませんが、あなたの質問に答えさせてください:
1.
あなたはinputstream
それから読み始めたことがないので、あなたはあなたの終わりに遭遇していません. あなたoutputstream
が言ったように、おそらく終わりに遭遇したので、書き終えました。
ジェイコブ (あなたのoutputstream
) が友人の家に封筒 (あなたのデータ) を届けていると想像してください。ジェイコブは友人の玄関マットに封筒を置き、自分の家に戻ります。この時点で、ジェイコブの仕事は終わったので、彼は自分が終わったことを自分自身に言い聞かせます(あなたの場合、outputstream
信号は anNSStreamEventEndEncountered
です)。
ジェイコブの友人であるジョージ (あなたのinputstream
) は、封筒を見ることも、見ることもできませんでした。したがって、ジョージが封筒を取り、その中身を見ない限り、彼はそれを見終わったことを自分自身に決して伝えることができませんでした(あなたの場合、 は を決して通知しinputstream
ませんNSStreamEventEndEncountered
)。
2.
これは実際には、をどのように使用する予定かによって異なりますoutputstream
。同じデバイスにデータを複数回送信する予定がある場合は、outputstream
オープンのままにしてみませんか? ソケットが開いていて、使用可能なスペースがある限り、データを書き込むことができます。ただし、を閉じると、outputstream
再度開く必要があります。