ठीक है, पहले आप अगर आप एआरसी या नहीं प्रयोग कर रहे हैं पता करने के लिए है, क्योंकि नियम थोड़ा बदल जाते हैं। इसके बाद, आपको यह जानना होगा कि आप वास्तव में अपनी कास्ट के साथ क्या करना चाहते हैं। क्या आप सिर्फ मूल्य का उपयोग करना चाहते हैं, या स्वामित्व स्थानांतरित करना चाहते हैं?
मैं एआरसी मानूंगा, क्योंकि, आईएमओ, सभी नए कोड वास्तव में एआरसी (और एआरसी है जहां कास्टिंग समस्याएं अधिक प्रचलित हैं) का उपयोग करना चाहिए।
CFArrayRef someArrayRef = ...;
NSArray *array = (__bridge NSArray*)someArrayRef;
ऊपर कोड एक NSArray*
कि वर्तमान संदर्भ में इस्तेमाल किया जा सकता करने के लिए CF संदर्भ डाले। स्वामित्व का कोई हस्तांतरण नहीं हुआ है। someArrayRef
अभी भी इसका संदर्भ रखता है, और आपको अभी भी someArrayRef
जारी करना होगा या यह रिसाव होगा।
CFArrayRef someArrayRef = ...;
NSArray *array = CFBridgingRelease(someArrayRef);
इस कोड में, आपको न केवल एक कास्ट मिलता है, बल्कि स्वामित्व का हस्तांतरण होता है। someArrayRef
अब संदर्भ नहीं रखता है, इसलिए इसे मैन्युअल रूप से रिलीज़ करने की आवश्यकता नहीं है। इसके बजाय, जब array
रिलीज़ होता है, तो ऑब्जेक्ट डेलोक (अन्य स्थानों में कोई अन्य संदर्भ नहीं मानता)।
स्रोत
2012-09-05 16:03:08
बहुत बहुत धन्यवाद! मैं अभी कोशिश करूँगा! – user1574429
आपको इसे कॉपी करने की आवश्यकता नहीं है। एक टोल फ्री ब्रिज कास्ट सचमुच सिर्फ 'एनएसएआरएआरई * myNsArray = (NSArray *) myCfArray है; ' – jjv360
जो केवल गैर-एआरसी कोड के लिए काम करता है। –