2011-05-23 31 views
2

我必須在下面的代碼中發佈NSDate嗎?我是否必須在下面的代碼中發佈NSDate?

(即或者是它,它只是爲我不必擔心一個局部變量的方法中創建的情況下)

我想問的原因是,當我運行的XCode探查並單擊之一其中內存跳了點,它highligted這段代碼(即在下面所附的第一行代碼) - 也就是我在看「泄漏塊」中的探查表..

-(NSDate *) dateBySettingHour:(NSInteger)hour andMinute:(NSInteger)minute { 

    // Get Calendar for Existing Date 
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar]; 
    NSDateComponents *components = [gregorian components: NSUIntegerMax fromDate: self]; 

    // Set Hour and Minute 
    [components setHour: hour]; 
    [components setMinute: minute]; 
    [components setSecond: 00]; 

    // Create resultant Date 
    NSDate *newDate = [gregorian dateFromComponents: components]; // WHERE THE PROFILE HIGHLIGHTS 

    // Clean Up 
    [gregorian release];  

    return newDate; 
} 

回答

3

您不必釋放由-[NSCalendar dateFromComponents:]返回的NSDate對象。 我的猜測是該行被突出顯示,因爲它是您最後一次引用 components(希望爲 NSDateComponents的一個實例),並且您忘記發佈 對象。

你的代碼沒問題。當我運行靜態分析器(而不是分析器)時,它報告沒有錯誤。我不知道爲什麼剖析器會報告泄漏 - 可能是Cocoa框架中存在內部泄漏?

+0

哦 - 我已經把完整的方法在現在的崗位 - 基於這個你認爲這將是組件變量? (我沒有用分配或複製產生它) – Greg 2011-05-23 03:21:35

+0

@Greg:我已經更新了我的答案。對不起,我不能更有幫助。 – 2011-05-23 03:28:47

+0

好的謝謝 - 也許我會發佈一個單獨的重點問題,爲什麼探查器突出顯示此代碼,如果它實際上是好的 – Greg 2011-05-23 03:30:55

2

不,你不必釋放它。它是autoreleased。

+0

只是想知道爲什麼然後探查器突出顯示這一行給我湯姆我猜 – Greg 2011-05-23 03:21:59

相關問題