NSDateFormatter Утечки памяти - PullRequest
2 голосов
/ 05 июля 2011

С помощью Instrument я обнаружил, что в следующем разделе кода утечка памяти.Инструмент, говорящий NSDateFormatter утечка памяти здесь.

- (NSDate*) dateSelected{
if(selectedDay < 1 || selectedPortion != 1) return nil;

TKDateInformation info = [monthDate dateInformationWithTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
info.hour = 0;
info.minute = 0;
info.second = 0;
info.day = selectedDay;
NSDate *d = [NSDate dateFromDateInformation:info timeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];


HolidayAppDelegate *delegatObj = (HolidayAppDelegate *)[UIApplication sharedApplication].delegate;

NSDateFormatter  *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"MMMM-dd-yyyy"];

    // below line getting leak
NSString *message = [[formatter stringFromDate:d] retain];
delegatObj.selecteddate=message;
NSLog(@" selectd %@ ",delegatObj.selecteddate);
[delegatObj getholiday_forcalnder];

return d;

}

Спасибо

Ответы [ 3 ]

4 голосов
/ 05 июля 2011

измените эти строки

NSString *message = [[formatter stringFromDate:d] retain];
delegatObj.selecteddate=message;

на эти строки

 NSString *message = [formatter stringFromDate:d];
  [message retain];
delegatObj.selecteddate=message;
[message release];

также выбранная дата является свойством типа retain, поэтому не вызывайте directy retain для нее.Это увеличивает счет удержания.

3 голосов
/ 05 июля 2011

Вам не нужно сохранять сообщение.Это будет принадлежать делегату.

0 голосов
/ 05 июля 2011

Попробуйте это может помочь вам

- (NSDate*) dateSelected
{
if(selectedDay < 1 || selectedPortion != 1) return nil;

TKDateInformation info = [monthDate dateInformationWithTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

info.hour = 0;

info.minute = 0;

info.second = 0;

info.day = selectedDay;

NSDate *d = [NSDate dateFromDateInformation:info timeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];


HolidayAppDelegate *delegatObj = (HolidayAppDelegate *)[UIApplication sharedApplication].delegate;

NSDateFormatter  *formatter = [[NSDateFormatter alloc] init];

[formatter setDateFormat:@"MMMM-dd-yyyy"];

NSString *message = [formatter stringFromDate:d];

delegatObj.selecteddate=message;

NSLog(@" selectd %@ ",delegatObj.selecteddate);

[delegatObj getholiday_forcalnder];

[formatter release];

return d;
}
...