2010-07-29 68 views
0
NSDateComponents *components = [cal components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:[[NSDate alloc] init]]; 

當我使用[components release];內存釋放與ALLOC

它崩潰了我的申請,我怎麼釋放組件

當我與泄漏儀器上運行 - 我的應用程序崩潰時達到整體ALLOC 22MB的使用

回答

2

的NSCalendar方法components:fromDate:返回一個自動釋放物體;你不能調用release它自己(除非你已經叫retain)。

退房的Memory Management Rules

3

你不能因爲它的設置由NSCalendar對象自動釋放自己釋放components可言。

我懷疑你的泄漏是由您傳遞給該行的代碼你NSDate物體發出。你或許應該賦值給一個局部變量,它傳遞到[cal components]方法然後釋放局部變量:

NSDate *today = [[NSDate alloc] init]; 
NSDateComponents *components = [cal components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) 
             fromDate:today]; 
[today release]; 

或者,設置NSDate對象本身自動釋放,你把它作爲你正在做的,使用正如David Gelhar所說的那樣,它會生成一個自動釋放對象,如下所示:

NSDateComponents *components = [cal components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) 
             fromDate:[NSDate date]]; 
+2

相當正確; '[NSDate alloc]'導致泄漏。請注意,而不是使用一個臨時和釋放它,你也可以只使用'[NSDate的日期]'得到一個自動釋放'NSDate'對象。 – 2010-07-29 17:54:46