繁体   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