एआरसी के साथ, मैं अब डाल सकता CGColorRef
करने के लिए id
। मुझे पता चला कि मुझे एक कास्ट करने की जरूरत है। क्लैग डॉक्स के अनुसार :
एक पाटने डाली एक सी शैली डाली तीन किसी कीवर्ड के साथ टिप्पणी की जाती है:
(__bridge T) op
गंतव्य प्रकार के लिए ऑपरेंड को निकालता हैT
। यदिT
एक प्राप्य ऑब्जेक्ट पॉइंटर प्रकार है, तोop
एक गैर-प्राप्य पॉइंटर प्रकार होना चाहिए। यदिT
एक गैर-पुन: प्रयोज्य सूचक प्रकार है, तो op में एक प्राप्य वस्तु सूचक प्रकार होना चाहिए। अन्यथा कलाकार बीमार है। स्वामित्व का कोई हस्तांतरण नहीं है, और एआरसी कोई भी संचालन नहीं करता है।
(__bridge_retained T) op
गंतव्य को टाइप करने के लिए ऑपरेंड को कास्टेबल होना चाहिए, जिसके पास नॉन-रिटेंबल पॉइंटर टाइप होना चाहिए। एआरसी मूल्य को बरकरार रखता है, स्थानीय मूल्यों पर सामान्य अनुकूलन के अधीन है, और प्राप्तकर्ता उस +1 को संतुलित करने के लिए जिम्मेदार है।
(__bridge_transfer T) op
गंतव्य को टाइप करने के लिए ऑपरेंड को कास्ट किया जाना चाहिए, जिसके पास नॉन-मेंटेबल पॉइंटर टाइप होना चाहिए, जो एक रिसेटेबल ऑब्जेक्ट पॉइंटर टाइप होना चाहिए। एआरसी स्थानीय मूल्यों पर सामान्य अनुकूलन के अधीन, पूर्ण अभिव्यक्ति के अंत में मूल्य जारी करेगा।एआरसी नियंत्रण में और बाहर वस्तुओं को स्थानांतरित करने के लिए इन जातियों की आवश्यकता होती है; अनुरक्षण योग्य वस्तु बिंदुओं के रूपांतरण पर अनुभाग में औचित्य देखें।
एक का उपयोग करना
__bridge_retained
या__bridge_transfer
एआरसी को समझाने के लिए फेंकना एक असंतुलित बनाए रखने या रिलीज के साथ किरदारों विशुद्ध रूप से क्रमश: खराब फार्म है।
मैं किस तरह की स्थितियों में प्रत्येक का उपयोग करूंगा?
उदाहरण के लिए, CAGradientLayer
एक colors
संपत्ति है जो CGColorRef
एस की एक सरणी को स्वीकार करती है । मेरा अनुमान है कि मुझे __brige
यहाँ का उपयोग करना चाहिए , लेकिन वास्तव में मुझे क्यों (या नहीं करना चाहिए) स्पष्ट नहीं है।