2011-03-12 69 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