2012-06-07 17 views
5

में वस्तु मैं MeetingUser सी है ++ वर्ग new_meetingUser अपनी वस्तुजोड़ना C++ NSMutableArray

है मैं NSMutableArray meetingUsersList जो मैं NSValue का उपयोग कर किया में जोड़ना चाहते हैं, लेकिन मैं cants कैसे वस्तु की स्मृति को संभालने के लिए बाहर बनाने के लिए और एनएसएमयूटेबलएरे का स्वामित्व।

MeetingUser *new_meetingUser = new MeetingUser(userName, dispName); 
[meetingUsersList addObject:[NSValue valueWithPointer:new_meetingUser]]; 

उत्तर

4

आप उस तरह की सरणी में सी ++ ऑब्जेक्ट जोड़ सकते हैं, लेकिन सरणी ऑब्जेक्ट का स्वामित्व नहीं लेगी। आपको यह सुनिश्चित करना होगा कि ऑब्जेक्ट को सरणी में हटाए जाने पर हटाया नहीं गया है, अन्यथा यह एक खतरनाक सूचक बन जाएगा। फिर आपको बाद में ऑब्जेक्ट को मैन्युअल रूप से हटाना होगा, जब आपको पता चलेगा कि ऐसा करना सुरक्षित है।

यदि आप चाहते हैं कि सरणी ऑब्जेक्ट का स्वामित्व ले ले, तो आपको CFMutableArray का उपयोग करना होगा। CFMutableArray आपको उन कार्यों को निर्दिष्ट करने की अनुमति देता है जिन्हें ऑब्जेक्ट से सरणी से निकाला जाता है, या जब सरणी को हटा दिया जाता है। आपके मामले में, आप ऑब्जेक्ट्स पर delete पर कॉल करने के लिए CFMutableArray सेट करना चाहते हैं।

+0

चेतावनी: यदि अन्य संदर्भ हो तो सरणी को हटा देना ऑब्जेक्ट को खतरनाक हो सकता है। यह इस बात पर निर्भर करता है कि क्या यह एकमात्र तरीका है जिसे ऑब्जेक्ट को सरणी में जोड़ा जा सकता है। – Chuck

+0

चेतावनी द्वितीय: 'हटाएं' एक फ़ंक्शन नहीं है, इसलिए आपको इसे लपेटने के लिए एक इटीटी बिटी कॉलबैक फ़ंक्शन लिखना होगा। – duskwuff

+0

हां। यदि आप सी ++ ऑब्जेक्ट को संदर्भित करना चाहते हैं तो सामान्य 'NSObject' की तरह गिना जाता है, तो आपको शायद एक रैपर क्लास बनाने की आवश्यकता होगी जो 'dealloc' में ऑब्जेक्ट को हटा दें, फिर रैपर ऑब्जेक्ट को' NSMutableArray' में जोड़ें। –

1

अनिवार्य रूप से, आप नहीं कर सकते। सी ++ ऑब्जेक्ट्स और ऑब्जेक्टिव-सी ऑब्जेक्ट्स पूरी तरह से अलग-अलग चीजें हैं, दोनों को "ऑब्जेक्ट्स" कहा जाता है। एनएसएआरएआरई केवल उद्देश्य-सी वस्तुओं को पकड़ सकता है। यह primitives, structs, सी ++ वस्तुओं या कुछ भी नहीं हो सकता है जो एक उद्देश्य-सी वस्तु नहीं है। सबसे अच्छा कामकाज एक उद्देश्य-सी वर्ग बनाना है जो आपके सी ++ वर्ग को लपेटता है और स्टोर करता है जो सरणी में संग्रहीत करता है।

1

एक दृष्टिकोण आपके सी ++ ऑब्जेक्ट को लपेटने के लिए एक छोटी ओबीजेसी कक्षा लिखना होगा। यह जितना सरल हो उतना जटिल या जटिल हो सकता है - केवल एक बड़ी चीज जो इसे करने की ज़रूरत है वह सी ++ ऑब्जेक्ट को फ़ील्ड में स्टोर करती है, और delete इसे dealloc में संग्रहीत करती है।

संबंधित मुद्दे