NSDateFormatter Утечка памяти - PullRequest
       11

NSDateFormatter Утечка памяти

2 голосов
/ 07 октября 2011

Я использую инструменты, и все время говорят, что утечка NSString составляет 100% * date = [df2 stringFromDate: dt]; линия. Я смотрю на примеры от Apple, и они в основном делают то же самое. Может кто-нибудь сказать мне, что я делаю неправильно, или если инструменты не так.

 +(NSString *) shortDateToLongDateString:(NSString *) dtString
 {
     NSDateFormatter *df = [[NSDateFormatter alloc] init];
     [df setDateFormat:@"yyyy-MM-dd"];

     NSDate *dt = [df dateFromString:dtString];
     [df release];

     NSDateFormatter *df2 = [[NSDateFormatter alloc] init];
     [df2 setDateFormat:@"EEEE MMMM d, yyyy"];
     NSString *date = [df2 stringFromDate:dt];
     [df2 release];

     return date;
 }

Я вызываю метод следующим образом:

 for (NSString * dt in uniqueDates)
 {
    NSString *longDate = [NSString stringWithString:[NSDateHelper shortDateToLongDateString:dt]];

    //Do something with the result...
 }

1 Ответ

2 голосов
/ 07 октября 2011

Я предполагаю, что функция выполняется во вторичном потоке, у которого нет активного NSAutoreleasePool.Если вы посмотрите в журнале консоли, вы, вероятно, обнаружите напечатанные «просто утечки» предупреждений (хотя и без информации о том, где находится утечка).

Реализуйте метод более или менее так:

+(NSString *) shortDateToLongDateString:(NSString *) dtString
 {
     NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
     NSDateFormatter *df = [[NSDateFormatter alloc] init];
     [df setDateFormat:@"yyyy-MM-dd"];

     NSDate *dt = [df dateFromString:dtString];
     [df release];

     NSDateFormatter *df2 = [[NSDateFormatter alloc] init];
     [df2 setDateFormat:@"EEEE MMMM d, yyyy"];
     NSString *date = [df2 stringFromDate:dt];
     [df2 release];

     [date retain];
     [pool drain];
     return [date autorelease];
 }
...