2011-06-08 10 views
6

मैं है परीक्षण के लिए मेरी कक्षा विधि में निम्न कोड: इसके लिएएनएसएमयूटेबल डिक्शनरी रिलीज?

NSString * interval; 

और गेटर विधि (यह संपत्ति नहीं है):

- (NSString *) getInterval { 
    return interval; 
} 

NSMutableDictionary * temp = [[NSMutableDictionary alloc] init]; 
[temp setObject:@"4" forKey:@"Interval"]; 
interval = [temp objectForKey:@"Interval"]; 
[temp release]; 

अंतराल मेरी उदाहरण चर रहा है

किसी अन्य कक्षा में मैं इस तरह की विधि का उपयोग करने की कोशिश कर रहा हूं:

NSString * test = [MyObject getInterval]; 

getInterval मुझे सही 4 मान देता है, मैं इसे डीबगर में देखता हूं। मैं समझ नहीं पा रहा हूं, क्योंकि, जैसा कि मैं समझता हूं, इंटरवल आवृत्ति चर के सूचक को एनएसएमयूटेबल डिक्शनरी के साथ मुक्त होना चाहिए। ऐसा क्यों होता है?

उत्तर

8

@"4" एक शाब्दिक/निरंतर NSString वस्तु है, और शाब्दिक/निरंतर NSStrings कभी नहीं पुनः आवंटित की जाती हैं - यही कारण है कि आप अभी भी है कि स्ट्रिंग हालांकि यह सैद्धांतिक रूप से जारी किया गया है चाहिए (शब्दकोश केवल मालिक मानते हुए किया गया था) संदर्भित कर सकते हैं।

इसका मतलब यह नहीं है कि आपको उचित मेमोरी प्रबंधन नियमों का पालन नहीं करना चाहिए। यदि आप interval रखना चाहते हैं तो आपको संभावित रूप से घोषित संपत्ति के माध्यम से इसे बनाए रखना या प्रतिलिपि बनाना चाहिए।

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