2012-04-20 45 views
6

我在NSDateFormatter中看到了很多关于内存泄漏的问题/答案,但似乎没有人帮助我确定是什么导致内存在我的应用程序中泄漏。这里是我的代码:使用NSDateFormatter时内存泄漏

- (id)init 
{ 
    if ((self = [super init])) 
    { 
     items = [[NSMutableArray alloc] init]; 
     events = [[NSMutableArray alloc] init]; 
     buffer = [[NSMutableData alloc] init]; 
     format = [[NSDateFormatter alloc] init]; 
     lastFromDate = @""; 
    } 
    return self; 
} 

- (void)presentingDatesFrom:(NSDate *)fromDate to:(NSDate *)toDate delegate:(id<KalDataSourceCallbacks>)delegate 
{ 
    [format setTimeZone:[NSTimeZone systemTimeZone]]; 
    [format setDateFormat:@"MM/dd/yyyy"]; 
    NSString *stringFromDate = [NSString stringWithString:[format stringFromDate:fromDate]]; 
    NSString *stringToDate = [NSString stringWithString:[format stringFromDate:toDate]]; 

    NSLog(@"From date: %@, To date: %@", stringFromDate, stringToDate); 

    [self didDatesChange:stringFromDate]; 

    if (dataReady) { 
     [callback loadedDataSource:self]; 
     return; 
    } 
    callback = delegate; 
    [self retrieveEventData:stringFromDate to:stringToDate]; 
} 

- (void)dealloc 
{ 
    [items release]; 
    [events release]; 
    [buffer release]; 
    [lastFromDate release]; 
    [format release]; 
    [super dealloc]; 
} 

当我运行“配置文件” - >“泄漏”,我得到了内存泄漏每次调用该函数上线时间

NSString *stringFromDate = [NSString stringWithString:[format stringFromDate:fromDate]]; 

有人能解释可能是什么继续? 感谢,迈克

+1

请邮寄didDatesChange:和retrieveEventDa TA:到:.由于在你的问题中没有明显的代码泄漏,我的猜测是在这些方法之一中存在不平衡的保留。 – danh 2012-04-20 22:33:09

+1

为什么仪器将我指向NSDate格式化的行如果泄漏是在这些函数中的任何一个? – 2012-04-23 13:42:22

回答

2

FYI你可以改变这一点:

NSString *stringFromDate = [NSString stringWithString:[format stringFromDate:fromDate]]; 

这样:

NSString *stringFromDate = [format stringFromDate:fromDate]; 

stringWithString应该返回一个自动释放的NSString虽然,所以我不相信这是来源你泄漏。看起来你的代码没有泄露给我。

2

你只是用波纹管法从日其正常工作的GET字符串......

-(NSString *)StringFromDate:(NSDate *)DateLocal{ 
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"MM/dd/yyyy"]; 
    NSString *dateString = [dateFormat stringFromDate:DateLocal]; 
    NSLog(@"Date is HERE =====>> %@",dateString); 
    return dateString; 
} 

当你想要得到的日期字符串只是使用像波纹管后....

NSString *stringFromDate = [self stringFromDate:fromDate]]; 
[stringfromdate retain]; 
NSString *stringToDate = [self stringFromDate:toDate]]; 
[stringTodate retain]; 

及以上 - (的NSString *)StringFromDate:(NSDate的*)DateLocal方法是必须在viewcontroller.m文件中定义.... 它的做工精细....

+1

您需要释放您在该方法中分配的NSDateFormatter。 – 2012-04-21 10:15:14

+0

是的我知道,但现在我只是定义的代码是有用的用户与其问题,我使用dateFormat globaly在我的应用程序.....虽然Thanx ... :-) – 2012-04-23 10:51:56

+1

我有NSDateFormatter全球定义,因为我不每次调用此函数时都不想创建新的函数。这会每一次重新创建一次,对吗?这有什么优点/缺点吗? – 2012-04-23 13:39:59