ARC ने फ़ाइल -fno-objc- आर्क को चिह्नित करने के बावजूद स्ट्रक्चर या यूनियनों में ऑब्जेक्टिव-सी ऑब्जेक्ट्स को मना किया है? ऐसा क्यों है?
मेरी यह धारणा थी कि यदि आप इसे -fno-objc-arc चिह्नित करते हैं तो आपके पास यह प्रतिबंध नहीं है।
जवाबों:
यदि आपको यह संदेश मिला है तो __unsafe_unretain का प्रयास करें। यह केवल सुरक्षित है, यदि संरचना में ऑब्जेक्ट अप्राप्त हैं। उदाहरण: यदि आप ARC के साथ OpenFeint का उपयोग करते हैं तो क्लास OFBragDelegateStrings एक संरचना में यह त्रुटि कहता है।
typedef struct OFBragDelegateStrings
{
NSString* prepopulatedText;
NSString* originalMessage;
} OFBragDelegateStrings;
सेवा
typedef struct OFBragDelegateStrings
{
__unsafe_unretained NSString* prepopulatedText;
__unsafe_unretained NSString* originalMessage;
} OFBragDelegateStrings;
NSArray
)? उस मामले में, इसे तुरंत निस्तारित नहीं किया जाएगा, लेकिन मुझे आश्चर्य है कि कंपाइलर क्या कहेंगे (अभी इसका परीक्षण नहीं कर सकते हैं) ...
एक संरचना का उपयोग करने के बजाय , आप इसके बजाय डेटा का प्रबंधन करने के लिए एक उद्देश्य-सी वर्ग बना सकते हैं ।
ऐसा इसलिए है क्योंकि आर्क, वस्तुओं या यूनियनों में वस्तुओं को ट्रैक नहीं कर सकता (क्योंकि वे उस बिंदु सी बिंदु पर हैं)।
भले ही आपने फ़ाइल / वर्ग को -fno-objc-arc
आपके साथ प्रश्न के रूप में चिह्नित किया हो, फिर भी आप इसे पैरामीटर के रूप में चाप द्वारा नियंत्रित एक ऑब्जेक्ट पास कर सकते हैं, जिसके परिणामस्वरूप मेमोरी लीक होने की संभावना होगी।
-fno-objc-arc
किसी प्रोजेक्ट के भीतर ARC और नॉन ARC फ़ाइलों को मिलाने के लिए उपयोग कर सकते हैं , लेकिन अगर आप सादे C संरचनाओं जैसे स्ट्रक्चर या यूनियन का उपयोग कर रहे हैं तो आप ARC का उपयोग बिल्कुल भी नहीं कर सकते।
ऐसा लगता है कि यह अब त्रुटियों के बिना काम करता है, शायद इस बदलाव के बाद ।
यानी, आप सी-स्ट्रक्चर में ऑब्जेक्टिव-सी ऑब्जेक्ट में सामान्य (मजबूत) पॉइंटर्स लगा सकते हैं। इसका प्रबंधन ARC उदा द्वारा किया जाता है, यह तब अप्राप्त होता है जब संरचना नष्ट हो जाती है। इसके साथ सत्यापित:
$ clang --version
Apple LLVM version 10.0.0 (clang-1000.11.45.2)