2012-04-20 15 views
6

का उपयोग करते समय मेमोरी लीक ने NSDateFormatter में मेमोरी लीक पर कई प्रश्न/उत्तर देखे हैं, लेकिन कोई भी मुझे यह निर्धारित करने में मदद नहीं करता है कि मेरे ऐप में रिसाव की वजह से स्मृति क्या हो रही है। यहाँ मेरी कोड है:NSDateFormatter

- (id)init 
{ 
    if ((self = [super init])) 
    { 
     items = [[NSMutableArray alloc] init]; 
     events = [[NSMutableArray alloc] init]; 
     buffer = [[NSMutableData alloc] init]; 
     format = [[NSDateFormatter alloc] init]; 
     lastFromDate = @""; 
    } 
    return self; 
} 

- (void)presentingDatesFrom:(NSDate *)fromDate to:(NSDate *)toDate delegate:(id<KalDataSourceCallbacks>)delegate 
{ 
    [format setTimeZone:[NSTimeZone systemTimeZone]]; 
    [format setDateFormat:@"MM/dd/yyyy"]; 
    NSString *stringFromDate = [NSString stringWithString:[format stringFromDate:fromDate]]; 
    NSString *stringToDate = [NSString stringWithString:[format stringFromDate:toDate]]; 

    NSLog(@"From date: %@, To date: %@", stringFromDate, stringToDate); 

    [self didDatesChange:stringFromDate]; 

    if (dataReady) { 
     [callback loadedDataSource:self]; 
     return; 
    } 
    callback = delegate; 
    [self retrieveEventData:stringFromDate to:stringToDate]; 
} 

- (void)dealloc 
{ 
    [items release]; 
    [events release]; 
    [buffer release]; 
    [lastFromDate release]; 
    [format release]; 
    [super dealloc]; 
} 

जब मैं "प्रोफाइल" चलाने के -> "लीक", मैं एक स्मृति रिसाव हर बार समारोह लाइन पर कहा जाता है

NSString *stringFromDate = [NSString stringWithString:[format stringFromDate:fromDate]]; 

कोई व्याख्या कर सकते हैं क्या हो सकता है चल रहा? धन्यवाद, माइक

+1

didDatesChange पोस्ट करें: और retrieveEventDa टा: :. को चूंकि आपके प्रश्न में कोड में कोई स्पष्ट रिसाव नहीं है, इसलिए मेरा अनुमान उन तरीकों में से एक के अंदर एक असंतुलित बरकरार है। – danh

+1

इंस्ट्रूमेंट्स मुझे उस रेखा पर क्यों इंगित करेंगे जहां एनएसडीएटी प्रारूपित है यदि लीक उन कार्यों में से किसी एक में थे? –

उत्तर

2

FYI करें आप इसे बदल सकते हैं:

NSString *stringFromDate = [NSString stringWithString:[format stringFromDate:fromDate]]; 
इस के लिए

:

NSString *stringFromDate = [format stringFromDate:fromDate]; 

stringWithString एक autoreleased NSString लौटना चाहिए, हालांकि तो मैं नहीं मानता कि का स्रोत है आपके रिसाव। ऐसा लगता है कि आपके कोड में कोई रिसाव नहीं है।

2

तुम सिर्फ जब आप दिनांक स्ट्रिंग सिर्फ bellow तरह का उपयोग करना चाहते हैं के बाद तारीख से अपना काम ठीक से स्ट्रिंग प्राप्त ......

-(NSString *)StringFromDate:(NSDate *)DateLocal{ 
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"MM/dd/yyyy"]; 
    NSString *dateString = [dateFormat stringFromDate:DateLocal]; 
    NSLog(@"Date is HERE =====>> %@",dateString); 
    return dateString; 
} 

के लिए bellow विधि का उपयोग करें ....

NSString *stringFromDate = [self stringFromDate:fromDate]]; 
[stringfromdate retain]; 
NSString *stringToDate = [self stringFromDate:toDate]]; 
[stringTodate retain]; 

और इसके बाद के संस्करण - (NSString *) StringFromDate: (NSDate *) DateLocal विधि अपने viewcontroller.m फ़ाइल में परिभाषित किया जाना चाहिए है .... इसके ठीक काम ....

+1

आपको विधि में आपके द्वारा आवंटित NSDateFormatter को रिलीज़ करने की आवश्यकता है। –

+0

हाँ मुझे पता है, लेकिन अब मैं सिर्फ उस कोड को परिभाषित करता हूं जो उपयोगकर्ता के लिए उपयोगी है, मैं अपने ऐप में डेटफॉर्मेट ग्लोबली का उपयोग करता हूं ..... हालांकि थेंक्स ... :-) –

+1

मेरे पास एनएसडीएटीफॉर्मेटर वैश्विक रूप से परिभाषित है, क्योंकि मैं नहीं करता इस समारोह को हर बार कॉल करने के लिए हर एक नया बनाना नहीं चाहता। यह हर बार इसे फिर से बनाएगा, सही? क्या इसके लिए कोई फायदे/नुकसान हैं? –

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