तुम इतनी तरह __has_feature
उपयोग कर सकते हैं,:
:
#if __has_feature(objc_arc)
// ARC is On
#else
// ARC is Off
#endif
आप भी जीसीसी के साथ निर्माण करने के लिए चाहते हैं (एप्पल के जीसीसी एआरसी का समर्थन नहीं करता), आप भी संकलक निर्धारित करने के लिए निम्नलिखित की आवश्यकता हो सकती
#if defined(__clang)
// It's Clang
#else
// It's GCC
#endif
अद्यतन
संयुक्त, वे सामान्य रूप ले जाएगा:
#if defined(__clang)
#if !defined(__has_feature)
// idk when clang introduced this
#error This version of clang does not support __has_feature
#endif
#define MON_IS_ARC_ENABLED_IN_THIS_TRANSLATION __has_feature(objc_arc)
#else
// for every compiler other than clang:
#if defined(__has_feature)
#error Another compiler supports __has_feature
#endif
#define MON_IS_ARC_ENABLED_IN_THIS_TRANSLATION 0
#endif
फिर अपने स्रोतों में या #define
एस के लिए बस MON_IS_ARC_ENABLED_IN_THIS_TRANSLATION
का उपयोग करें।
यदि आपके द्वारा उपयोग किया जाने वाला एक कंपाइलर समर्थन जोड़ता है, तो आपको इसके लिए एक केस जोड़ना होगा (और संकलक त्रुटियों को इस मामले में त्रुटि को पकड़ने की संभावना है, क्योंकि यह संभवतः रेफ गिनती ओप के उपयोग को रोक देगा)।
ध्यान दें कि यह आरक्षित पहचानकर्ताओं (टिप्पणियों में बातचीत के आधार पर) को परिभाषित करने से कैसे (और चाहिए) को प्रदर्शित करने से बचने के लिए अतिरिक्त जांच है। यह संपूर्ण नहीं है, लेकिन एक प्रदर्शन है। यदि आप खुद को सशर्त __has_feature
अक्सर लिखते हैं, तो आप परिभाषाओं को कम करने और सरल बनाने के लिए इसके लिए एक नया मैक्रो परिभाषित करना चाहेंगे। यह आपदा के लिए एक नुस्खा है क्योंकि
#if ARC
// do nothing
#else
[myObject release]
#endif
, वहाँ कई सूक्ष्म ऐसे कोड में गुप्त कीड़े हैं:
@ सुल्तान, सुविधा के लिए उचित उपयोग के मामले हैं। यह सुनिश्चित करने के लिए कि आप लाइब्रेरी के उपयोगकर्ता न केवल अपने एआरसी-सक्षम स्रोतों को पकड़ते हैं और उन्हें एआरसी समर्थन के बिना संकलित करते हैं, पूरे स्थान पर स्मृति को लीक करते हैं (कुछ दिन पहले मेरे साथ हुआ)। उस ने कहा, प्रश्न में दिया गया नमूना कोड वास्तव में गन्दा दिखता है। – zoul
@zoul आप जो कुछ भी कर सकते हैं उसके लिए कभी तैयार नहीं हो सकते हैं। यदि आपके मामले में एआरसी चालू है तो एक साधारण दावा पर्याप्त होगा।एआरसी और एमआरसी दोनों के साथ संगत कोड रखने की कोशिश करना खराब पठनीयता के साथ एक बहुत ही जटिल कोड (या गड़बड़) में समाप्त होना चाहिए। और कोड जो पठनीय नहीं है, उसे मंथन करना मुश्किल है। – Sulthan
सहमत हैं, जोरदार बात यह है कि मेरे मन में क्या था। – zoul