objective c - If I want to make a new instance of an object in a function whose pointer is passed by reference in it -
- (शून्य) createAString: (NSString **) str {* str = [NSString stringWithString: @ "हाय सब!"]; [* आरआर आटोरेलेज]; // ???? क्या यह सही है ? }
मुझे रिहाई या ऑटोरेक्ल का उपयोग कैसे करना चाहिए? मैं पाठ्यक्रम के फ़ंक्शन के बाहर रिलीज नहीं करना चाहता हूं:)
... NSString * createStr; [मैन्युअल रूप से निर्मित: & amp; createStr]; NSLog (@ "% @", createStr);
आप सही हैं कि आप आमतौर पर ऑटोरेलेज़ हुए (या पसंद ) जब आप इस प्रपत्र का उपयोग करते हैं तो बाहर पैरामीटर ऑब्जेक्ट्स फ़ंक्शन में आपका असाइनमेंट कथन जो एक स्ट्रिंग के लिए * str
सेट करता है:
* str = [NSString stringWithString: @ "foo"];
पहले से ही सही काम कर रहा है, क्योंकि यह तरीका NSString का एक उदाहरण देता है कि कॉल करने वाला स्वयं नहीं है। जैसे कि आप इस स्ट्रिंग ऑब्जेक्ट को बिना किसी और मेमोरी प्रबंधन के बदले अपने फ़ंक्शन से वापस कर सकते हैं, वैसे ही आप इसे पूरा कर सकते हैं जैसे कि आपने किया है।
यह कहा, मैं आपके कोड में कुछ चीजों के बारे में चिंतित हूं जो आपको सुनिश्चित कर लेना चाहिए कि आप समझते हैं:
- < Li>
-
फ़ंक्शन का रिटर्न शून्य होने पर इस तरह के एक आउटपोरम सेट करना मुहावरेदार कोको नहीं है आप सामान्य रूप से केवल
NSString *
सीधे वापस करेंगे आउटपार्म कोको में दुर्लभ हैं (आम तौर पर सिर्फNSError
एस इसे ढांचागत कॉल से प्राप्त होता है। अन्यथा वे पारंपरिक रूप से नाम के रूप मेंgetString
नाम का उपयोग करते हैं, जो उन सामान्य पहुंच से जुड़े अंतरों से अंतर करते हैं जो शब्द "प्राप्त" ।) -
मुझे आशा है कि
-stringWithString
सिर्फ एक उदाहरण था। >> "स्ट्रिंग शाब्दिक" (हालांकि यह आपके उदाहरण को गंदी होगा) का उपयोग करने के लिए, इस पद्धति का लगभग कभी अभ्यास में प्रयोग नहीं किया जाता है।
विधि के अंदर str
का मान अब भी एक **
है, और वह संदेश भेज रहा है (जैसा आपने सट्टा के लिए किया है autorelease
) बकवास है सुनिश्चित करें कि आप उन्हें बहुत उदारता से उपयोग करने से पहले दोगुनी अप्रत्यक्ष संकेतों को पूरी तरह से समझें। :) यदि आपको str
एक संदेश भेजने के बाद भेजने की आवश्यकता है, तो इसे * str
पर भेजें, जो कि NSString *
है। < / P>
Comments
Post a Comment