9

NSStream のスレッド化プロセスを説明する適切なドキュメントは見つかりませんでした。具体的には、NSInputStream に行きましょう。私にとって Objective-C のスレッド化は、単純に見えるという理由だけで、今のところ謎です。

私の質問は主にこの行を指しています:

[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

入力ストリームが実行される実行ループを指定できます。これは非常にクールだと思いました。問題は、入力ストリームと出力ストリームをそれぞれ独自のスレッドで実行し、両方を Connection などの単一のクラスでインスタンス化する場合、それらを独自のスレッドで実行するにはどうすればよいでしょうか?

私が尋ねる理由は、代表者のためです。以前は、着信/発信データを処理する[inputStream setDelegate:self]ことを宣言する必要がありました。stream:handleEvent

最終的に私の質問は、入力ストリームと出力ストリームをセットアップするクラスが 1 つある場合、各ストリームをスレッド化し、ストリーム イベントを処理する責任を現在のクラスに委任するにはどうすればよいですか?

ここにむさぼり食うべきいくつかのコードがあります:

[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];

私は次のことを考えています:

  • 現在のクラスの両方のスレッドの責任を委任することはできません。別のオブジェクトに委任する必要があります。
  • 1 つのスレッドで両方のストリームを処理できますか? (個人的にはそうは思いません。入出力が並行して実行されるからです)
  • 私はこれを間違って考えています。別の実行ループを作成し、別のスレッドに対して scheduleRunLoop を呼び出すことができますか?

何か案は?

4

2 に答える 2