2012-07-28 3 views
5

NSStream의 스레딩 프로세스를 설명하는 문서를 찾지 못했습니다. 구체적으로 말하자면, NSInputStream을 찾아 보겠습니다. 나에게 Objective-C 스레딩은 현재 너무 단순 해 보이기 때문에 현재 미스테리입니다.scheduleInRunLoop - 스레딩 네트워크 연결

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

당신은 내가 아주 멋진라고 생각 입력 스트림에서 실행됩니다 실행 루프를 지정할 수 있습니다 : 내 질문은 무엇

은 주로이 라인을 의미합니다. 문제는 입력 및 출력 스트림을 자체 스레드에서 실행하고 두 클래스 모두 단일 클래스에서 인스턴스화한다고 가정 할 때 Connection이 자신의 스레드에서 실행되도록하려면 어떻게해야합니까?

내가 물어 보는 이유는 대표자 때문입니다. 이전에는 [inputStream setDelegate:self]을 수행 했으므로 수신/송신 데이터를 처리하기 위해 stream:handleEvent을 선언해야합니다.

궁극적으로 내 질문은 입력 및 출력 스트림을 설정하는 클래스가 하나있는 경우 어떻게 각 스트림을 스레드하고 스트림 이벤트 처리 책임을 현재 클래스에 위임합니까?

    당신은 현재 클래스에서 모두 스레드에 대한 책임을 위임 할 수 없습니다
  • , 당신이해야 할 것 :

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

    나는이 다음 생각하고 있어요 : 여기

    는에 씹는하는 몇 가지 코드입니다 개체를 분리하여 위임합니다.
  • 하나의 스레드가 두 스트림에 모두 적용됩니까? (나는 개인적으로 그렇게 생각하지 않는다. 왜냐하면 입출력은 동시에 실행되기 때문이다.)
  • 나는 이것을 잘못 생각하고 있으며, 별도의 실행 루프를 만들고 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하지 않기를 강요하고있다. .. –