2009-04-28 3 views
19

कई पुस्तकों में और कई साइटों पर मैं देखता हूं -ड्रेन। खैर, एक ऑटोरेलीज पूल के लिए जो अच्छा लगता है। लेकिन क्या यह रिलीज के अलावा कुछ भी करता है? मुझे लगता है कि पूल पूल को रिहा किए बिना पूल को अपनी सभी वस्तुओं को छोड़ देता है। केवल अनुमान है।एक ऑटोरेलीज पूल में भेजने या निकालने के बीच क्या अंतर है?

उत्तर

25

ध्यान दें कि ऑक्सीजन के उत्तर पर टिप्पणियां कह रही हैं कि -्रेन एनएसएयूटोरोलीपूल जारी नहीं करता है, सही नहीं है। documentation for NSAutoreleasePool स्पष्ट रूप से कहता है कि -्रेन ने NSAutoreleasePool रिलीज़ (और इस प्रकार नष्ट)।

-्रेन एनएसयूयूटोरिलीपूल ऑब्जेक्ट्स के लिए उपयोग करने के लिए एक प्रतिस्थापन है, केवल अंतर यह है कि कचरा संग्रहण प्रणाली को संकेत मिलता है।

+0

धन्यवाद। तो आईफोन ओएस पर इसका उपयोग करना बेहतर है-नाली के बजाए? – Thanks

+1

एक गैर-जीसी पर्यावरण में वे वही हैं। दुर्लभ मामले को छोड़कर जहां आप किसी भी कारण से जीसी सिस्टम को संकेत नहीं देना चाहते हैं अगर कोड जीसी मोड में कभी भी इस्तेमाल किया गया था, तो कोड लक्ष्यीकरण 10.4+ में नाली के बजाय रिलीज का उपयोग करने का कोई कारण नहीं है। – smorgan

+1

ऐप्पल का उपयोग करता है - मुख्य() फ़ंक्शन में एआरपी के लिए कृपया ... – Thanks

10

आपके सिस्टम एक कचरा संग्रह है, तो जीसी

के लिए संदेश (objc_collect_if_needed) भेजने -drain यदि आपके पास नहीं जीसी, तो नाली = रिलीज

+0

तो एक-ड्र्रेन पूल को भी जारी करेगा, है ना? – Thanks

+1

-retain और -drain तरीकों NSAutoreleasePool वस्तु की retainCount परिवर्तन नहीं करता है वे केवल पूल में सभी वस्तुओं को रिलीज संदेश भेजने मैं नहीं जानता, कैसे और कब NSAutoreleasePool वस्तुओं destroing कर रहे हैं ((( – oxigen

+1

नहीं, नाली जारी करता है पूल। ऑटोरेलीज पूल की बात आती है और गिनती बरकरार रखने पर कोई जादू नहीं होती है, वे किसी अन्य ऑब्जेक्ट के समान नियमों का पालन करते हैं, सिवाय इसके कि उन्हें बनाए रखा जा सकता है या ऑटोरेलेस्ड नहीं किया जा सकता है (जो वैसे भी ज्यादा समझ में नहीं आता है) –

10

आक्सीजन सही है, विधि के लिए दस्तावेज़ देखें NSAutoreleasePool की drain:

एक संदर्भ बार गणना वातावरण में, विज्ञप्ति और रिसीवर पॉप; कचरा-एकत्रित वातावरण में, कचरा संग्रह ट्रिगर करता है यदि स्मृति संग्रह से आवंटित स्मृति वर्तमान थ्रेसहोल्ड से अधिक है।

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