@autoreleasepool
कथन NSAutoreleasePool कक्षा का उपयोग करने के बजाय पहले जैसा ही काम कर रहा है। जिस तरह से NSAutoreleasePool काम करता था वह थोड़ा अजीब था, क्योंकि इसे पूरे एप्लिकेशन में प्रभाव पड़ा; @autoreleasepool
एक स्कोप्ड क्षेत्र बनाता है और पूल के भीतर क्या होता है और जब यह निकलता है (जब यह गुंजाइश से बाहर हो जाता है) को स्पष्ट करता है। ऐप्पल के मुताबिक यह और भी कुशल है।
एक ऑटोरेलीज पूल की अवधारणा सरल है, जब भी ऑब्जेक्ट इंस्टेंस को ऑटोरेलेज्ड के रूप में चिह्नित किया जाता है (उदाहरण के लिए NSString* str = [[[NSString alloc] initWithString:@"hello"] autorelease];
), उस समय उस समय +1 की एक गिनती गिनती होगी, लेकिन रन लूप के अंत में , पूल निकाला जाता है, और किसी ऑब्जेक्ट को ऑटोरेलीज़ चिह्नित किया जाता है, फिर इसकी गिनती की कमी घट जाती है। जब आप इसे तैयार करेंगे, तब भी ऑब्जेक्ट को चारों ओर रखने के लिए यह एक तरीका है।
एआरसी के साथ, जबकि autorelease
कीवर्ड डेवलपर द्वारा उपयोग नहीं किया जाता है, अंतर्निहित प्रणाली जो आपके लिए एआरसी आवेषण का प्रबंधन करती है। (याद रखें: सभी एआरसी कर रहे हैं retain
, release
और autorelease
उचित समय पर आपके लिए कॉल करते हैं)। इस वजह से, मौजूदा AutoreleasePool अवधारणा को रहने की जरूरत है।
आप autorelease पूल निकालते हैं, तो आपके वस्तुओं
एक संदर्भ गिना वातावरण में लीक शुरू कर देंगे, कोको वहाँ उम्मीद एक autorelease पूल हमेशा उपलब्ध होने की। यदि कोई पूल उपलब्ध नहीं है, तो ऑटोरेलेज्ड ऑब्जेक्ट्स रिलीज़ नहीं होते हैं और आप स्मृति को रिसाव करते हैं। इस स्थिति में, आपका प्रोग्राम आमतौर पर उपयुक्त चेतावनी संदेशों को लॉग करेगा।
या हो सकता है http://stackoverflow.com/questions/8714875/why-does-xcode-4-2-use-autoreleasepool-in-main-m-instead-of-nsautoreleasepool –