2012-04-20 14 views
6

kullanırken Bellek Sızıntısı NSDateFormatter'de bellek sızıntıları hakkında birçok soru/cevap görmekteyim, ancak uygulamada bellek sızıntısına neyin neden olduğunu belirlememe yardımcı olmuyor. İşte benim kod: Ben "Profil" çalıştırdığınızdaNSDateFormatter

- (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]; 
} 

-> "Kaçaklar", bir bellek sızıntısı işlev hattında denir her zaman olsun

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

birisi ne olabileceğini açıklayabilir devam ediyor? teşekkürler, Mike

+1

didDatesChange gönderin: ve retrieveEventDa ta: :. için Sorunuzdaki kodda belirgin bir sızıntı olmadığından, tahminim bu yöntemlerden birinin içinde dengesiz bir şekilde durmaktadır. – danh

+1

Aletler, sızıntıların bu işlevlerden herhangi birinde olsaydı neden NSDate'in biçimlendirildiği çizgiye işaret ederdi? –

cevap

2

Bilginize bunu değiştirebilirsiniz: Buna

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

:

NSString *stringFromDate = [format stringFromDate:fromDate]; 

stringWithString yüzden bu kaynağı olduğuna inanmıyorum gerçi bir autoreleased NSString dönmelidir senin sızdırıyor. Bana kodunda sızıntı yok gibi görünüyor.

2

sen .... tarih dizesi sadece bağırma gibi kullanmak almak istediğinizde sonra çalışma düzgün tarihten itibaren olsun dize ......

-(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; 
} 

için feryat yöntemi kullanmak

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

ve üzeri - (NSString *) StringFromDate: (NSDate *) DateLocal yöntem viewcontroller.m dosyasında tanımlamak gerekir ise .... ince Onun çalışmaları ....

+1

yönteminde atandığınız NSDateFormatter'ı serbest bırakmanız gerekir. –

+0

evet biliyorum ama şimdi sadece sorunu ile kullanıcı için yararlı bir kod tanımlamak, benim app dateFormat globaly kullanıyorum ... Thanx ... :-) –

+1

Ben dünya çapında tanımlı NSDateFormatter var, çünkü ben Bu fonksiyon çağrıldığında her seferinde yeni bir tane yaratmak istiyorum. Bu her seferinde yeniden yaratır, değil mi? Bunun herhangi bir avantajı/dezavantajı var mı? –

İlgili konular