【问题标题】:NSDateFormatter Memory LeakNSDateFormatter 内存泄漏
【发布时间】:2011-12-02 16:30:44
【问题描述】:

我正在运行仪器,它一直说 NSString *date = [df2 stringFromDate:dt]; 上存在 100% 泄漏线。我看苹果的例子,他们基本上做同样的事情。谁能告诉我我做错了什么或者仪器是否有问题。

 +(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...
 }

【问题讨论】:

  • 这些代码行没有泄漏。您是否运行过 Clang 静态分析器?
  • 在设备上运行对吗?
  • 不管在哪里。只需选择分析,看看它会给你什么。
  • 是的,我已经运行了静态分析器。分析仪没有显示任何问题。代码也运行良好。然而,在配置文件的泄漏部分,它显示 100%。它声称还有很多其他地方存在内存泄漏,但我的应用程序从未崩溃。你见过这个吗?这些真的是泄漏吗?来自其他位置的泄漏是否可以使它看起来像是来自这里?

标签: objective-c xcode instruments memory-leaks


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2013-01-20
    • 2011-10-31
    相关资源
    最近更新 更多