2010-04-18 5 views
7

कभी-कभी मुझे यह पता लगाना पड़ता है कि कोई ऑब्जेक्ट वास्तव में जारी किया जाएगा या नहीं। मैं निश्चित रूप से उपकरण इस्तेमाल कर सकते हैं, लेकिन यह बहुत समय लगता है, और मैं वस्तुओं के लाखों लोगों में खोज करने के लिए है, तो मैं यह करने के लिए इस्तेमाल किया:क्या डीबगिंग के लिए 'रिलीज` ओवरराइड करना सुरक्षित है?

-(void)release { 
    NSLog(@"I'm released"); 
    [super release]; 
} 

लेकिन समस्या यह है: इस करना सुरक्षित है? जब मैं -(void)release ओवरराइड करता हूं तो क्या मुझे कोई समस्या हो सकती है। इसके अलावा, क्या यह वास्तव में void है? और क्या होगा यदि मैं वितरण के लिए अपना आवेदन तैयार करता हूं, लेकिन प्रति दुर्घटना में इसे छोड़ दें? या यह सिर्फ सुरक्षित है? धन्यवाद

+0

"वास्तव में जारी" से आपका क्या मतलब है? क्या आपको लगता है कि कभी-कभी [foo रिलीज] रिलीज संदेश भेजने का कारण नहीं बनता है? – JeremyP

+0

@ जेरेमीपी '[[[foo alloc] init] autorelease]; '?? –

+0

मैं देखता हूं। आप देखना नहीं चाहते कि रिलीज विधि काम करती है, लेकिन अगर ऑब्जेक्ट कभी जारी हो जाता है। इसे अपने जीवनकाल में कई बार बनाए रखा और जारी किया जा सकता है, इसलिए रिलीज विधि को डीबग करना शायद उपयोगी नहीं है। आप शायद नीचे लॉरेन एटीम्बल के जवाब को देखना चाहते हैं। 'ऑनवे शून्य' के बारे में उल्लेख करने के लिए – JeremyP

उत्तर

19

यह ठीक है, लेकिन कृपया इसे केवल डीबगिंग के लिए प्रतिबंधित करें।


यह void, लेकिन oneway void नहीं है।

-(oneway void)release { 
    NSLog(@"I'm released"); // <-- remeber the @. 
    [super release]; 
} 

ध्यान दें कि अगर आप केवल NSObject के लिए इसे ओवरराइड, फिर "टोल फ्री पाटने कंटेनरों" (जैसे NSCFArray, आदि) के लिए भेजा -release संदेशों याद किया जाएगा क्योंकि वे भी -release अधिरोहित किया है करने के लिए अग्रेषित करने के लिए CFRelease

+3

+1 – Eonil

5

रिलीज संदेश केवल उदाहरण की संदर्भ गणना को कम करता है।

- (void)dealloc { 
    NSLog(@"I am deallocated"); 
    [super dealloc]; 
} 

इसे बुद्धिमानी से उपयोग करें:

आप को पता है अगर उदाहरण जारी की गई है चाहते हैं, तो सबसे अच्छा dealloc संदेश ओवरराइड करने के लिए है।

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