मान लीजिए मैं कुछ समारोह से एक सी स्ट्रिंग हो रही है:मेमोरी मैनेजमेंट: NSString के stringWithCString: एन्कोडिंग:
char * mystring = SomeCFunction(...);
और मैं इस स्ट्रिंग के मालिक हैं (मैं इसे मुक्त कराने के लिए जिम्मेदार है, जब मैं काम पूरा हुआ हूं)।
NSString * mynsstring = [NSString stringWithCString:mystring
encoding:NSUTF8StringEncoding];
मैं अभी भी मूल सी स्ट्रिंग को मुक्त कराने के लिए उत्तरदायी हूं:
हैं, ऑब्जेक्टिव-सी में, मैं एक NSString *
का उपयोग कर बनाने के?
मुझे लगता है कि उत्तर हाँ है, लेकिन मुझे प्रलेखन में एक निश्चित उत्तर नहीं मिल रहा है - और विपरीत विधि (cStringUsingEncoding
) की कार्यक्षमता, जबकि सनसनीखेज, मुझे रोक देता है, क्योंकि यह मुझे संभालता है सीस्ट्रिंग आपके लिए मुफ्त।
यदि उत्तर हाँ है, तो क्या मैं यह सुनिश्चित करने के लिए ज़िम्मेदार भी हूं कि मैं NSString *
का उपयोग करने से पहले सी स्ट्रिंग को मुक्त नहीं करता हूं, या फ़ंक्शन मेरे लिए स्ट्रिंग की प्रतिलिपि बनाता है? मैं इस पूछना क्योंकि stringWithCString
के लिए प्रलेखन यह कहते हैं:
एक स्ट्रिंग किसी दिए गए सी सरणी में बाइट्स वाले रिटर्न, किसी दिए गए एन्कोडिंग के अनुसार व्याख्या की ।
जो मुझे अभी भी बाइट्स की प्रतिलिपि बना रहा है, या यह आंतरिक रूप से इंगित कर रहा है (और मैं मूल रूप से केवल एक कलाकार कर रहा हूं) सोच रहा हूं।
आह! तुम कमाल हो। धन्यवाद! स्वीकृति-अवरोधक टाइमर पर 6 मिनट शेष होने के बाद मैं उत्तर स्वीकार करूंगा। – Steve
यह दस्तावेज़ों पर होना चाहिए –
@ एंड्रेफ्रेटेलि I सुझाव है कि आप एक फीडबैक दर्ज करें (ऑनलाइन दस्तावेज के प्रत्येक पृष्ठ के नीचे एक लिंक है) इसलिए ऐप्पल इसे वहां जोड़ता है ;-) – AliSoftware