मैं पहेली को पूरा करने की कोशिश कर रहा हूं।
__strong
NSObject, NSString, आदि जैसे सभी ऑब्जेक्टिव-सी मेंटेनेंस ऑब्जेक्ट पॉइंटर्स के लिए डिफ़ॉल्ट है। यह एक मजबूत संदर्भ है। एआरसी -release
गुंजाइश के अंत में इसे संतुलित करता है।
__unsafe_unretained
पुराने तरीके के बराबर है। यह एक कमजोर सूचक के लिए प्रयोग किए जाने योग्य वस्तु को बनाए रखने के बिना है।
__weak
की तरह है __unsafe_unretained
सिवाय इसके कि यह एक स्वत: शून्यीकरण को कमजोर संदर्भ अर्थ सूचक ही संदर्भित वस्तु पुनः आवंटित की जाती है के रूप में नहीं के बराबर करने के लिए निर्धारित किया जाएगा कि है। यह खतरे के बिंदुओं और EXC_BAD_ACCESS त्रुटियों को समाप्त करता है।
लेकिन वास्तव में क्या __autoreleasing
अच्छा है? जब मुझे इस क्वालीफायर का उपयोग करने की आवश्यकता होती है, तो मुझे व्यावहारिक उदाहरण खोजने में कठिन समय लगता है। मेरा मानना है कि यह केवल उन कार्यों और विधियों के लिए है जो एक पॉइंटर-पॉइंटर की अपेक्षा करते हैं जैसे:
- (BOOL)save:(NSError**);
या
NSError *error = nil;
[database save:&error];
जिसके तहत एआरसी को इस तरह घोषित किया जाना है:
- (BOOL)save:(NSError* __autoreleasing *);
लेकिन यह बहुत अस्पष्ट है और मैं पूरी तरह से समझना चाहूंगा कि क्यों । कोड स्निपेट मुझे लगता है कि दो सितारों के __autoreleasing inbetween को जगह देता है, जो मुझे अजीब लगता है। प्रकार है NSError**
(NSError के लिए एक पॉइंटर-पॉइंटर), इसलिए __autoreleasing
तारों को इनबिल्ट न करके केवल सामने ही क्यों रखें NSError**
?
इसके अलावा, ऐसी अन्य परिस्थितियां भी हो सकती हैं जिनमें मुझे भरोसा करना चाहिए __autoreleasing
।