2013-02-25 35 views
15

ReactiveCocoa का उपयोग करके, ग्राहकों को उन मानों को उत्पन्न करने वाले किसी भी ऑपरेशन को पुन: ट्रिगर करने के बजाय सिग्नल से समान मान प्राप्त करने के दो तरीके होते हैं: RACReplaySubject या RACMulticastConnection के माध्यम से।RACReplaySubject बनाम RACMulticastConnection का उपयोग कब करें?

यहाँ RACReplaySubject के लिए शीर्ष लेख डॉक्स हैं:

एक पुनरावृत्ति विषय (अपने परिभाषित क्षमता तक) मूल्यों यह भेजा जाता है बचाता है और नए ग्राहकों के लिए उन resends। यह एक त्रुटि या पूरा करने को भी फिर से चलाएगा।

और RACMulticastConnection के लिए:

एक बहुस्त्र्पीय संबंध में कई ग्राहकों के लिए एक संकेत करने के लिए एक सदस्यता के साझा करने के विचार समाहित। की सदस्यता अंतर्निहित सिग्नल में साइड इफेक्ट्स शामिल है या इसे से अधिक नहीं कहा जाना चाहिए, इसकी अक्सर आवश्यकता होती है।

मल्टीकास्टेड सिग्नल केवल -[RACMulticastConnection connect] कहलाता है जब सब्सक्राइब किया जाता है। ऐसा होने तक, कोई मान signal पर भेजा जाएगा। देखें -[RACMulticastConnection connect] स्वचालित रूप से कॉल किया जा सकता है।

ध्यान दें कि आपको मैन्युअल रूप से RACMulticastConnection नहीं बनाना चाहिए। इसके बजाय -[RACSignal publish] या -[RACSignal multicast:] का उपयोग करें।

कोई जब आप RACReplaySubject का प्रयोग करेंगे या RACMulticastConnection के रूप में सरल दिशा निर्देश प्रदान कर सकते हैं?

उत्तर

32

असल में, वे परस्पर अनन्य नहीं हैं, और इन्हें एक साथ भी उपयोग किया जा सकता है।

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

RACMulticastConnection एक निजी RACSubject पर मूल्य भेजकर इसे पूरा करता है, जो कनेक्शन की signal संपत्ति के माध्यम से खुलासा होता है। सब्सक्राइबर्स इस विषय से संलग्न होते हैं (जो किसी भी दुष्प्रभाव का कारण नहीं बनता है), और कनेक्शन बेस बेस सिग्नल की सभी घटनाओं को आगे बढ़ाता है।

कुछ अलग तरीकों एक कनेक्शन बनाने के लिए कर रहे हैं:

  • -publish एक सादे RACSubject के साथ एक संबंध बनाता है। यह विषय पिछले ग्राहकों को नए मूल्यों को फिर से नहीं चलाएगा।
  • -multicast: विधि आपकी पसंद के विषय के साथ एक कनेक्शन बनाता है। आप यहां RACReplaySubject का उपयोग करने का निर्णय ले सकते हैं।
  • -replay, -replayLast, और -replayLazily तरीकों एक RACReplaySubject के साथ एक संबंध बनाने के लिए उपयुक्तता, और फिर भी अपने आप इसे करने के लिए connecting हैं।

संदेह में हैं, तो -replayLazily शायद आप क्या चाहते हैं, क्योंकि यह सभी मूल्यों की बचत होती है और केवल कोई साइड इफेक्ट से चलाता है (या किसी भी काम शुरू होता है) जब लौटे संकेत एक सदस्यता प्राप्त करता करेंगे।

+0

उत्कृष्ट, धन्यवाद! – Poulsbo

+0

क्या RACMulticastConnection WebSocket क्लाइंट के "ऑनमेज" ब्लॉक के लिए उपयुक्त होगा? फिर, ग्राहक अलग-अलग डेटा प्रकारों के साथ क्या कर सकते हैं उचित रूप से फ़िल्टर कर सकते हैं? –

+0

@MaxAlexander आप इसके लिए एक अलग प्रश्न खोलना चाहेंगे, क्योंकि मुझे नहीं लगता कि मैं बिना किसी विवरण के इसका उत्तर दे सकता हूं। –