2012-07-28 19 views
5

मैं किसी भी सभ्य प्रलेखन कि NSStream के लिए सूत्रण प्रक्रिया बताते नहीं पाया है। विशिष्ट होने के लिए, चलिए एनएसआईएनपुटस्ट्रीम के लिए जाएं। मेरे लिए उद्देश्य-सी में थ्रेडिंग वर्तमान में एक रहस्य है क्योंकि यह इतना आसान प्रतीत होता है।scheduleInRunLoop - सूत्रण नेटवर्क कनेक्शन

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

आप रन पाश कि इनपुट स्ट्रीम में दिखाया जाएगा, जो मैंने सोचा था कि काफी शांत था निर्दिष्ट कर सकते हैं:

क्या मेरे सवाल है मुख्य रूप से इस लाइन को दर्शाता है। बात यह है कि, अगर मैं इनपुट और आउटपुट स्ट्रीम अपने स्वयं के धागे में चलाने के लिए चाहता हूं, और दोनों एक ही कक्षा में तत्काल हैं, तो कनेक्शन कहें, फिर आप उन्हें अपने धागे में कैसे चला सकते हैं?

मेरे द्वारा पूछे जाने वाले कारण प्रतिनिधियों की वजह से हैं। पहले हम [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]; 

मैं सोच रहा हूँ निम्नलिखित:

  • आप वर्तमान कक्षा में दोनों धागे के लिए ज़िम्मेदारी सौंपना नहीं कर सकते, तो आप करना होगा

    यहाँ chomp करने पर कुछ कोड है अलग वस्तुओं के लिए प्रतिनिधि।

  • एक धागा दोनों धाराओं के लिए क्या करेगा? (मैं व्यक्तिगत रूप से नहीं लगता कि ऐसा है, क्योंकि इनपुट/आउटपुट समवर्ती चलेंगे)
  • मैं गलत के माध्यम से इस सोच रहा हूँ, और आप एक अलग रन पाश बना सकते हैं और कुछ अलग थ्रेड के खिलाफ 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

थोड़ा सा स्पष्टीकरण अच्छा होगा। मैं खुद को मजबूर नहीं कर रहा हूं कि इसे कम करें .. –

संबंधित मुद्दे