我正在运行仪器并且它一直说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...
}
答案 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];
}