NSObject
एक स्वच्छ समारोह autorelease
कहा जाता है। इसका मतलब है उद्देश्य-सी में सभी ऑब्जेक्ट्स इस फ़ंक्शन को शामिल करते हैं।
यह फ़ंक्शन ऑटोरेलीज पूल में self
डालें, ऑटोरिज़ पूल को ऑब्जेक्ट के release
फ़ंक्शन पर कॉल करने में देरी हो रही है। अधिकांश आंतरिक एपीआई एक ऑटोरेलीज पूल का उपयोग करते हैं, और main()
में स्थित एक के बगल में, प्रत्येक पास में UIKit के मुख्य पाश में आवंटित और डिलीकेट किया जाता है।
संक्षेप में: संदर्भ काउंटर में देरी की कमी के लिए यह कतार है। जहां autorelease छिपा हुआ है पर
उदाहरण:
[NSString stringWithUTF8String:"some string"];
इस वस्तु आवंटित किया जाता है, और autorelease इस पर कहा जाता है। आप इसे अपने आप कैसे इस्तेमाल करेंगे?
MyObject *obj = [[[MyClass alloc] init] autorelease];
यह अच्छा क्यों है? जब आप इस ऑब्जेक्ट को वापस करते हैं, तो कॉलिंग फ़ंक्शन को इस ऑब्जेक्ट को रिलीज़ करने की देखभाल करने की आवश्यकता नहीं होती है, और वैकल्पिक रूप से यह इसे बनाए रख सकता है (लेकिन ऐसा नहीं है)।
विस्तार और चार साल बाद स्पष्ट करने के लिए:
UIKit और AppKit बना सकते हैं और उनके मुख्य runloop के दौरान एक NSAutoreleasePool
नाली, अपने गैर जीयूआई कार्यक्रम में एक ओर जहां आप इसे अपने आप को बनाने के लिए की जरूरत है। विभिन्न कोड NSAutoreleasePool
मौजूद होने की अपेक्षा करते हैं, और चूंकि आपने एक जीयूआई ढांचा शुरू नहीं किया है और न ही आप एक का उपयोग करते हैं, वहां कोई कोड नहीं है जो आपके लिए जादुई रूप से इसे बनाएगा।
जबकि NSLog()
और एक निरंतर NSString
अपने उदाहरण एक पूल, यहां तक कि तुच्छ [NSMutableArray array]
, यह देखते हुए है कि यह वास्तव में [[[NSMutableArray alloc] init] autorelease]
रूप में व्याख्या की जा सकती है की आवश्यकता नहीं है में।
स्रोत
2010-09-07 13:51:39
यदि आपको कुछ अन्य उत्तर विशेष रूप से सहायक लगता है, तो इसे "अप" करने के लिए स्वतंत्र महसूस करें, और/या इसे सही के रूप में चिह्नित करें। –