2009-03-12 16 views
8

Noob सवाल:क्या एनएसएसटींग ऑब्जेक्ट्स आवंटित और इनिट की आवश्यकता है?

मैं धारणा है कि जब आप एक वस्तु बनाने के लिए चाहते हैं, आप alloc और init कि वस्तु की जरूरत के तहत वर्तमान में कर रहा हूँ।

हालांकि, मैंने देखा कई नमूना कोड जहां एक NSString वस्तु घोषित किया जाता है देखा है, फिर भी मैं निम्नलिखित कोई alloc या init संदेशों को देख ...

एक बहुत ही सरल उदाहरण:

NSString *myString = @"Hello World"; 

NSLog(@"%@" , myString); 

क्या कोई यह समझा सकता है कि ऐसा क्यों है?

उत्तर

12

घोषित करने के लिए किसी भी मेमोरी को रिलीज़ करने की आवश्यकता नहीं है।

वस्तुओं को तत्काल करता है। और आप केवल एक नई वस्तु का दृष्टांत यदि आप फोन alloc या कॉपी

अपने उदाहरण में, आप पहले से ही विद्यमान उद्देश्य यह है कि संकलक हार्ड-कोडेड स्ट्रिंग से पैदा करने के लिए अपने संदर्भ की स्थापना कर रहे हैं। और आपको इसकी याददाश्त का प्रबंधन नहीं करना है क्योंकि आपने इसे तुरंत चालू नहीं किया है।

मुझे नहीं पता कि मैं इसे स्पष्ट रूप से पर्याप्त समझा रहा हूं या नहीं।

संपादित करें:

ऐसा लगता है कि पहले से ही एक सवाल है कि इस का जवाब देता है जैसे:

Is a literal NSString autoreleased or does it need to be released?

+0

धन्यवाद सर्जीओ ... अब मैं समझता हूं। – ChrisR

+1

क्या '@ "है ..."' फाउंडेशन, कोर फाउंडेशन की हेडर फाइल में घोषित किया गया है या संकलक इन्हें संभालता है? –

6

जब आप अपने कोड में किसी NSString शाब्दिक एम्बेड करते हैं, इस तरह के @"hello, world' के रूप में, संकलक आबंटित करता है आपके निष्पादन योग्य फ़ाइल में इसके लिए स्थान और यह स्मृति में लोड हो गया है और आपका प्रोग्राम शुरू होने पर प्रारंभ किया गया है।

चूंकि यह आपके निष्पादन योग्य का हिस्सा है, यह आपके ऐप के पूरे जीवनकाल के लिए रहता है। इसे बनाए रखने या इसे जारी करने की कोई आवश्यकता नहीं है। NSString *myString वैरिएबल जो आप इसके लिए बनाते हैं वह स्मृति में जगह के लिए एक सूचक है जहां संकलक NSString शाब्दिक डालता है।

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