2012-10-27 11 views
9

मेरे पास एक सिंगलटन क्लास है जो डेटा को तब तक जमा करती है जब तक कि डेटा मेरे डेटाबेस में लिखा न जाए (यदि आप जानना चाहते हैं कि मैं इस तरह से चीजों को लागू क्यों कर रहा हूं, तो here देखें)। डेटा को सहेजने के बाद, मैं सिंगलटन को नष्ट करना चाहता हूं। मैं एआरसी में यह कैसे कर सकता हूं? या मैं पागल हो रहा हूं और क्या मुझे इसे नष्ट करने की ज़रूरत है?आईओएस: मैं एआरसी में सिंगलटन को कैसे नष्ट कर सकता हूं? क्या मैं?

* आप कह सकते हैं कि यह this प्रश्न का डुप्लिकेट है, लेकिन यहां स्वीकृत उत्तर उपयोगी होने के लिए पर्याप्त विशिष्ट नहीं है। यह कहता है "आप एक विधि/फ़ंक्शन घोषित कर सकते हैं जिसे आप स्पष्ट रूप से कॉल करते हैं।" इस तरह के लिए कोड क्या दिख सकता है? अगर मैं किसी विधि के बाहर ऑब्जेक्ट को रिलीज़ नहीं कर सकता, तो मैं इसे किसी विधि के अंदर कैसे खींच सकता हूं? यह भी कहता है "एक स्थिर सी ++ वर्ग धारण करने का सबसे आसान तरीका यह है कि इसे अपने विनाशक में रिलीज़ करें।" मुझे सी ++ नहीं पता, लेकिन - क्या आप वास्तव में अपने ऐप कोड में सी ++ कक्षा डाल सकते हैं?

मेरे सिंगलटन तो तरह कार्यान्वित किया जाता है:

+(NHCFamilyStatus *)familyStatus 
{ 
    static dispatch_once_t pred; 
    static NHCFamilyStatus *familyStatusSharedObject=nil; 

    dispatch_once(&pred,^
    { 
     familyStatusSharedObject = [[NHCFamilyStatus alloc] init]; 
    }); 

    return familyStatusSharedObject; 
} 
+1

[इस पोस्ट में, आप में मदद मिलेगी कृपया उसे देखें के रूप में सही ढंग से अपने सिंगलटन लागू करने के लिए] [1] [1]: http://stackoverflow.com/questions/7598820/correct-singleton- पैटर्न-उद्देश्य-सी-आईओएस – chrislhardin

+0

आप सिंगलटन को क्यों नष्ट करते हैं न कि केवल डेटा युक्त बफर? – Jano

+0

@Jano क्या आप समझा सकते हैं कि मैं उस बफर को कैसे नष्ट कर सकता हूं? – cmac

उत्तर

19

आप इस सिंगलटन नष्ट हैं, तो आप कभी नहीं इसे फिर से बनाने के लिए सक्षम हो जाएगा (है कि क्या dispatch_once कॉल का मतलब है)।

सिंगलटन को नष्ट करने के लिए की आवश्यकता नहीं है। हर तरह से सिंगलटन पर एक विधि है जो किसी भी आवृत्ति चर को हटा देती है जिसकी आपको अब आवश्यकता नहीं है, लेकिन कुछ और करने की आवश्यकता नहीं है।

+0

ओह, ज़ाहिर है (पुनः: dispatch_once)। मुझे माफ़ कर दो, आवृत्ति चर को कम करना मुख्य रूप से फायदेमंद है क्योंकि यह स्मृति को मुक्त कर देगा? – cmac

+0

हां, यह राज्य को रीसेट करता है क्योंकि आपने जिस डेटा पर काम कर रहे थे उसे सहेज लिया है। – jrturton

+0

@jrturton मैं यह नहीं बता सकता कि आपका जवाब कहता है कि यह संभव है या सिंगलटन ऑब्जेक्ट को नष्ट नहीं करना है। आप कहते हैं "आप इस सिंगलटन को नष्ट नहीं कर सकते" और फिर आगे बढ़ने के लिए कहें "आपको सिंगलटन को नष्ट करने की आवश्यकता नहीं है"। उनके साथ मेरा अनुभव यह है कि उन्हें नष्ट करना संभव है, ऐसी आवश्यकता होने के लिए असामान्य है, और जैसा आपने बताया है- यदि आप शुरुआत में dispatch_once() में बनाए गए थे तो आप इसे फिर से नहीं बना सकते। मैं सिर्फ एक सीधा जवाब पाने की कोशिश कर रहा हूं, आपको चुनौती नहीं दे रहा हूं :) – pnizzle

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