2011-03-12 35 views
2

如果我分析我的程序用的XCode 4的工具,下面的行导致“对象的潜在泄漏线127分配”。NSDateComponents/NSCalendar泄漏

NSDateComponents *weekdayComponents = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] components:NSWeekdayCalendarUnit fromDate:[[NSDate date] dateByAddingTimeInterval:(60*60*24)]]; 

如果我尝试将其释放([weekdayComponents release];),将出现一个警告阅读“未此时调用者所拥有的对象的引用计数错误减量”。有任何想法吗? 在此先感谢!

回答

1

在你的代码的问题是,你不挂到NSCalendar对象,所以你不能再释放它。

换句话说,你是泄漏NSCalendar对象。如果你坚持在具有在一个声明中的一切,你应该将其更改为:

NSDateComponents *weekdayComponents = 
    [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]     
    components:NSWeekdayCalendarUnit 
    fromDate:[[NSDate date] dateByAddingTimeInterval:(60*60*24)] 
    ]; 

更妙的是分裂声明:

NSCalendar *calendar = 
    [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 

NSDateComponents *weekdayComponents = 
    [calendar 
     components:NSWeekdayCalendarUnit 
      fromDate:[[NSDate date] dateByAddingTimeInterval:(60*60*24)] 
    ]; 

[calendar release]; 
+0

非常感谢你。我没有考虑释放整个NSCalendar。 – fscheidl 2011-03-12 14:11:06