objective c - why lowercaseString of NSString is not released after the original NSString object is released? -
कृपया निम्न कोड की जांच करें:
CFUUIDRef uuid = CFUUIDCreate (kCFAllocatorDefault); NSString * strUuid = (NSString *) CFUUIDCreateString (केसीएफएलओकेटरडिफ़ॉल्ट, यूयूआईडी); NSString * lowerUuid = [स्ट्रूयूआईड लोअरकेस स्ट्रिंग]; एनएसएलॉग (@ "स्ट्रुउइड बनाए रखने की संख्या:% ट्यू", [स्ट्रूयुइड बनाएटेनकाउंट]); CFRelease (strUuid); CFRelease (UUID); एनएसएलॉग (@ "कमयूयूआईआईडी बनाए रखने की संख्या:% टीयू", [कम यूयूआईआईडी कोटाइट]); NSLog (@ "lowerUuid:% @", lowerUuid); इस कोड को गैर-आर्क परियोजना में चलाने के लिए, आउटपुट होगा:
स्ट्रूयूआईडी बनाए रखने के लिए माउंट: 1 कमयूयूआईआईडी को बनाए रखने के लिए माउंट: 1 कमयूयूआईडी: xxxxxxxx-xxxx- Xxxx-xxxx-xxxxxxxxxxxx लोअरकेस स्ट्रिंग NSString की एक संपत्ति है, इसकी परिभाषा है:
@property (केवल पढ़ने के लिए) NSString * लोअरकेस स्ट्रिंग; तो यह समझाने के लिए उचित है कि अगर मूल NSString ऑब्जेक्ट जारी किया गया है, तो लोअरकेसस्ट्रिंग गुण NSString के dealloc विधि में जारी किया जाएगा। लेकिन ऊपर दिए गए कोड में, मूल यूआरआईआईडी जारी होने के बावजूद कम यूयूआईआईटी अभी भी क्यों है?
पहले सभी, मानक अस्वीकरण: नहीं देखिए- समाप्त करें । इसके उपयोग के लिए कई चेतावनियां हैं और कुछ उपयोगी के लिए वास्तव में भरोसा नहीं किया जा सकता।
उस ने कहा: आपका अनुमान बताता है कि क्या हो रहा है जब आप struuid को -lowercaseString के लिए पूछें, तो आपको कुछ प्रकार की "बच्चे" वस्तु नहीं मिल रही है जिसके परिणामस्वरूप लोअरकेस स्ट्रिंग पूरी तरह से स्वतंत्र ऑब्जेक्ट है, इसके साथ ही अपनी आंतरिक अनुरक्षण गिनती है। (यह संभव है कि मूल स्ट्रिंग कम सीज़न के लिए अपना खुद का संदर्भ बनाए रखे, लेकिन यह आपकी चिंता नहीं है।)
मानक मेमोरी प्रबंधन सम्मेलनों के तहत, सामान्य शब्दों में क्या हो रहा है यह है कि कथन [struuid लोअरकेस स्ट्रिंग] एक "आटोरेलेज़ेड" ऑब्जेक्ट देता है। ताकि मूल स्ट्रिंग जारी होने पर भी, जो स्ट्रिंग आपके पास लौटा दी गई थी वह या तो मान्य है: (ए) कम से कम जब तक कि ऑटोरिएरेज पूल साफ नहीं हो जाता है या (बी) अपनी अंतिम वास्तविक पहुंच के बाद, प्रोजेक्ट पर एआरसी स्थिति के आधार पर।
Comments
Post a Comment