簡體   English   中英

我應該在返回對象之前發送保留或自動釋放嗎?

[英]Should I send retain or autorelease before returning objects?

我以為我在這里做的是正確的,但我從構建和分析中得到了一些警告,所以現在我不太確定。 我的假設是(a)我從函數中獲取的對象(在這種情況下為dateFromComponents:)已經設置為自動釋放,(b)我應該從函數返回的對象設置為autorelease。 因此,在將其返回給調用者之前,我不需要發送自動釋放或保留dateFromComponents的結果: 是對的嗎?

作為旁注,如果我將我的函數從newTimeFromDate重命名為:gnuTimeFromDate,分析器不會對此函數發出任何警告。 是所有“new *”方法返回保留而不是自動釋放的對象的約定?

Cocoa的內存管理編程指南中,它說“收到的對象通常保證在收到它的方法中保持有效”,並且“該方法也可以安全地將對象返回給它的調用者”。 這讓我相信我的代碼是正確的。

但是,在Cocoa的Memory Management中,它說“假設通過任何其他方法獲得的對象的保留計數為1並駐留在自動釋放池中。如果要保持超出當前執行范圍,則必須保留它。 “ 這讓我覺得我需要在返回NSDate對象之前進行保留。

我正在使用針對iPhone SDK 3.1.2的10.6.2上的Xcode 3.2.1進行開發。

構建/分析輸出的屏幕截圖http://nextsprinter.mggm.net/Screen%20shot%202009-11-15%20at%2008.33.00.png

如果您在閱讀屏幕截圖時遇到問題,請輸入以下代碼:

//============================================================================
// Given a date/time, returns NSDate for the specified time on that same day
//============================================================================
+(NSDate*) newTimeFromDate:(NSDate*)fromDate 
       Hour:(NSInteger)hour 
     Minute:(NSInteger)min 
     Second:(NSInteger)sec
{
 NSCalendar* curCalendar = [NSCalendar currentCalendar];
 const unsigned units    = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
 NSDateComponents* comps = [curCalendar components:units fromDate:fromDate];
 [comps setHour:   hour];
 [comps setMinute: min];
 [comps setSecond: sec];

 return [curCalendar dateFromComponents:comps];
}

你幾乎是對的。 clang正確指出的唯一問題是你的方法承諾一個retain count +1對象(其名稱包含“new”),但是你要返回一個自動釋放的對象。

您有兩個選擇:從方法名稱中刪除“new”或保留返回的對象。返回自動釋放的對象(正如您所做的)更多Cocoa-ish並將方法命名為timeFromDate: .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM