这是正确的返回日期重新内存管理?

时间:2011-05-16 20:51:30

标签: iphone objective-c memory-management

这是否正确返回日期重新进行内存管理?

我在这里的假设是我想将日期返回给来电者,但我不希望来电者能够更改日期并影响方法的日期,因此我以为我会回复一份。

所以我的方法中的代码是:

- (NSDate*)dateForMyTest {
     return [[self.endDate copy] autorelease];
}

我假设我必须自动发布它,因此调用者不必这样做,因为他们自己也不会调用init / copy /等。

4 个答案:

答案 0 :(得分:2)

就你而言,你是对的。但请注意,NSDate是不可变的,所以没有理由不返回self.endDate

答案 1 :(得分:2)

它可能有效,但不需要创建副本。 NSDateimmutable,以后无法修改。

这应该足够......

- (NSDate*)dateForMyTest {
     return self.endDate;
}

答案 2 :(得分:0)

是的,这是正确的。因为方法名称不包括init / copy / new,所以应该自动释放。

答案 3 :(得分:0)

如果应用程序使用的是nsoperations / threads等,则可能需要复制自动释放。但是您可能已经更安全 - 或者不是:当您使用时

return self.endDate

可能会发生任何事情,具体取决于财产的设置方式。是吗

 @property (retain) endDate; 

,或更常见,更快,更少线程安全

 @property (nonatomic, retain) endDate; 

它和你一样复杂!

What's the difference between the atomic and nonatomic attributes?