2016-06-09 9 views
7

हम एक DisposeBag बनाते हैं, और एक Observable, सदस्यता Observable और फिर addDisposableTo(disposeBag), मुझे पता है जब DisposeBag deinit जा रहा है, यह संसाधनों को रिहा करने dispose() फोन करेगा अन्यथा यह स्मृति रिसाव का नेतृत्व करेंगे।जब हमें RxSwift में addDisposableTo (disposeBag) को कॉल करना चाहिए?

यदि ObservableComplete या Error भेजें जो सीमित समय में समाप्त हो। जब ObservableDisposeBag डेनिट से पहले समाप्त हो जाता है, तो क्या मुझे addDisposableTo(disposeBag) पर कॉल करने की आवश्यकता है? क्या DisposeBag स्वचालित रूप से उस पर्यवेक्षक को रिलीज़ करता है जिसने इसे सब्सक्राइब किया जब संदेश समाप्त हो गया?

let disposeBag = DisposeBag() 

Observable.just("") 
    .subscribe { event in 
     print(event) 
    } 
    .addDisposableTo(disposeBag) 

क्या मुझे स्पष्ट रूप से .addDisposableTo(disposeBag) होना चाहिए? मुझे लगता है कि भेजने के बाद, Observable पर्यवेक्षक को समाप्त और जारी करेगा?

उत्तर

7

आपको विश्वास है कि एक नियतात्मक रास्ता में नमूदार कम्प्लिट्स हैं - आदि अपने उदाहरण में just का उपयोग कर, या take, takeUntil का उपयोग कर, जैसे -, आप DisposeBag का उपयोग नहीं करने के लिए चुन सकते हैं।

आपको एक कंपाइलर चेतावनी मिल सकती है, जो वास्तव में इस व्यवहार को अच्छी तरह से बताती है और इसके आसपास कैसे काम करती है। लेकिन सामान्य रूप से, यदि आप DisposeBag का उपयोग करते हैं तो यह भविष्य में सबूत है।

देखें: Unused disposable warning

0

निपटान बैग RX करने के लिए व्यवहार की तरह एआरसी वापस जाने के लिए उपयोग किया जाता है। जब एक डिस्पोजेबैग को हटा दिया जाता है, तो यह प्रत्येक अतिरिक्त डिस्पोजेबल पर निपटान करेगा।

इसका उपयोग उन पुराने संदर्भों का निपटान करने के लिए किया जाता है जिन्हें आप बंद करने और संसाधनों में पारित करते हैं जिन्हें अब और आवश्यक नहीं है (और जो स्पष्ट रूप से उपयोग नहीं किए गए थे): उदाहरण के लिए एक खुला HTTP कनेक्शन, डेटाबेस कनेक्शन या कैश।

तो यदि हमारे पास कोई संसाधन है जो छोड़ा जा सकता है, तो आपको इसे कॉल करना चाहिए।

this article में अधिक।

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