NSDateFormatter内存泄漏

时间:2011-10-07 01:13:22

标签: objective-c xcode instruments memory-leaks

我正在运行仪器并且它一直说NSString上有100%的泄漏* date = [df2 stringFromDate:dt];线。我看一下苹果的例子,他们基本上做同样的事情。任何人都可以告诉我我做错了什么或仪器是否错误。

 +(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 个答案:

答案 0 :(得分:2)

我的猜测是该函数正在一个没有活动的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];
 }