में कुंजी के रूप में एनएसएसटींग का उपयोग कैसे करें I उद्देश्य-सी ++ प्रोजेक्ट पर काम शुरू कर रहा हूं, मुझे लगता है कि मैं किसी भी भारी-ड्यूटी डिज़ाइन से पहले दोनों भाषाओं के संश्लेषण को महसूस करता हूं। मैं सी ++ के साथ स्वचालित संदर्भ गणना को एकीकृत करने के तरीके से बहुत चिंतित हूं: हमें NSObjects
के लिए स्मार्ट पॉइंटर्स के समतुल्य मिलते हैं जो एसटीएल कंटेनरों (सीएफ डेविड चिस्नेल के लेख http://www.informit.com/articles/article.aspx?p=1745876&seqNum=3 पर) को ठीक से बनाए/रिलीज़ करते हैं।उद्देश्य-सी ++ std :: कुंजी
मैं एसटीएल मानचित्र का उपयोग NSStrings
से सी ++ मानों में टाइपएफ़ मैपिंग के रूप में करना चाहता हूं। मैं
std::map<NSString*, MyType> mapping
एआरसी के साथ मैपिंग घोषित कर सकता है, यह मैपिंग मेमोरी प्रबंधन को सही तरीके से संभालती है। लेकिन यह NSString
मूल्य अर्थशास्त्र का सही पालन नहीं करता है, क्योंकि यह -[NSString compare:]
के बजाय पॉइंटर तुलना का उपयोग कर रहा है।
पॉइंटर तुलना के बजाय स्ट्रिंग तुलना का उपयोग करने के लिए एसटीएल मानचित्र प्राप्त करने का सबसे अच्छा तरीका क्या है?
क्या मुझे std::less<NSString*>
विशेषज्ञता का प्रयास करना चाहिए?
क्या मुझे std::map<NSString*, MyType, MyCompare>
जैसे स्पष्ट तुलनित्र घोषित करना चाहिए?
क्या मुझे लागू करने वाले स्मार्ट पॉइंटर में NSString*
कुंजी लपेटनी चाहिए?
आप कैसे सर्वश्रेष्ठ परिभाषित करते हैं? वांछित परिणाम गति स्मृति क्या है? – madmik3
दिलचस्प। मुझे नहीं पता था कि ओबीजेसी पॉइंटर्स एआरसी के साथ इतनी आसानी से काम करेंगे। चिस्नेल के लेख को देखते हुए, आपको काम करने के लिए अपने मानचित्र घोषणा में __weak या __strong जोड़ना होगा। अन्यथा वे पीओडी हैं और यह काम नहीं करेगा। (मुझे तुलनित्र मुद्दे का कोई जवाब नहीं है क्योंकि मैं इसे शायद ही कभी करता हूं और बाद में भूल जाता हूं। मैं इसे आपके द्वारा दिए गए क्रम में कोशिश करता हूं।) – smparkes
मुझे लगता है कि अगर पॉइंटर्स मजबूत हैं तो आपको उन्हें चिह्नित करने की आवश्यकता नहीं है, केवल अगर वे कमज़ोर हैं। वैसे भी, मैं एक स्पष्ट तुलनित्र के साथ जाना होगा। – bames53