[英]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.