2013-03-04 60 views
3

内存泄漏当我分析我的iPhone应用程序,我发现太多的内存泄漏: enter image description here与NSDateFormatter

还有就是我与NSDateFormatter代码和代码是在一个循环:

for (NSDictionary * dataDict in deserializedData) { 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    NSTimeZone *timeZone = [NSTimeZone localTimeZone]; 
    [dateFormatter setTimeZone:timeZone]; 
    [dateFormatter setDateFormat : @"yyyy-MM-dd HH:mm:ss"]; 
    NSString *currentDateString = [dateFormatter stringFromDate:[NSDate date]]; 
    [dateFormatter release]; 
} 

,谁受得了告诉我我的代码有什么问题。

+1

你是否经常在循环中创建和释放NSDateFormatter?如果是这样,请尝试创建一次并引用单个实例。 – 2013-03-04 06:10:39

+0

对,代码在一个循环中! – why 2013-03-04 06:16:47

+0

它看起来像它创建的字符串被泄露,从我可以告诉。 (看看它如何说'泄漏对象:icu :: UnicodeString')。你是在某处分配字符串而不是释放它? – Malaxeur 2013-03-04 06:18:26

回答

2

像这样的自动释放只要尝试,

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
NSTimeZone *timeZone = [NSTimeZone localTimeZone]; 
[dateFormatter setTimeZone:timeZone]; 
[dateFormatter setDateFormat : @"yyyy-MM-dd HH:mm:ss"]; 

for (NSDictionary * dataDict in deserializedData) { 
    NSString *currentDateString = [dateFormatter stringFromDate:[NSDate date]]; 
} 
+0

+1用于创建NSDateFormatter一次。但为什么不把它设置一次呢? – vikingosegundo 2013-03-04 07:57:46

+0

我将代码更改为仅设置了一次格式化程序。如果你不喜欢,请回滚。 – vikingosegundo 2013-03-04 08:02:53

1

没有什么错在此代码。但我认为它不是主线程中调用的。

只需在您编写此代码的函数的开头创建一个autorelease池。在函数结束时释放池。

-(void) yourFun 
{ 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    //other stuff... 

    for (NSDictionary * dataDict in deserializedData) { 
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     NSTimeZone *timeZone = [NSTimeZone localTimeZone]; 
     [dateFormatter setTimeZone:timeZone]; 
     [dateFormatter setDateFormat : @"yyyy-MM-dd HH:mm:ss"]; 
     NSString *currentDateString = [dateFormatter stringFromDate:[NSDate date]]; 
     [dateFormatter release]; 
    } 

    [pool release]; 
} 
+1

是什么让你觉得它没有在主线程上调用? – vikingosegundo 2013-03-04 07:58:45