2012-07-28 4 views
5

NSStreamのスレッディングプロセスについて説明しているまともなドキュメントが見つかりませんでした。具体的には、NSInputStreamに行きましょう。私にとってObjective-Cのスレッディングは、とてもシンプルなので、現在のところ謎です。私の質問は何scheduleInRunLoop - スレッディングネットワーク接続

は、主に次の行を参照:

[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を呼び出すことができるだろうか?

答えて

-3
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode 
{ 
    switch (eventCode) { 
     case NSStreamEventNone: 
      break; 
     case NSStreamEventOpenCompleted: 
      break; 
     case NSStreamEventHasBytesAvailable: 
      [self _readData]; 
      break; 
     case NSStreamEventHasSpaceAvailable: 
      [self _writeData]; 
      break; 
     case NSStreamEventErrorOccurred: 
      break; 
     case NSStreamEventEndEncountered: 
      break; 
     default: 
      break; 
    } 
} 
+6

-1ジャンクコードは答えではありません。あなたはそれを説明しなければなりません。あなたがしていることをやっている理由について少しだけ説明してください。 – Fogmeister

+1

少し説明が良いでしょう。私はこれをdownvoteしないように自分自身を強制しています.. –

関連する問題