我该何时释放NSDate对象?

3
这两个日期指针在使用完后是否需要[release]呢?我应该如何知道呢?因为我没有明确地进行初始化,所以我不确定。
NSDate *date = [NSDate date];

NSDate *date = [dateWithTimeIntervalSince1970:100000000];
2个回答

5
不需要担心这些方法返回的两个日期都是自动释放的。虽然作为一个好公民,当你完成它们时将指针设置为nil是一个好主意,但你不需要担心它们的内存管理。
作为一般规则,在Cocoa/Cocoa Touch中,任何带有“Copy, Alloc, Retain”或“New”这些词的方法都会返回需要在某个时刻由你释放的对象。这些是应用于返回具有+1保留计数的对象的方法的命名约定。调用这些方法的类“拥有”该对象,并负责在完成后释放它。
希望这可以帮助你。

5

两者都是自动释放的,也就是说你不需要手动释放它们。一个经验法则是:如果你使用 +alloc 或 -copy 方法,或者显式地对一个对象进行了 retain 操作,那么你就拥有了该对象:

  • [[SomeClass alloc] init...]
  • [someObject copy]
  • [some object retain]

如果你拥有一个对象,那么你必须释放它。+new 是 +alloc 和 -init 的一种快捷方式。


好的,但是不释放它是不正确的吗?如果我没有明确地这样做,它什么时候会被释放? - glutz78
释放你不拥有的对象是错误的。这被称为“过度释放”,当-release(或任何其他消息)发送到已释放的对象时,将导致崩溃。自动释放的对象实际上是在封闭的NSAutoreleasePool被释放/排空时释放的(如果您没有显式使用它们,则会在每个事件循环周期结束时发生)。请参阅“Cocoa内存管理编程指南”。 - Costique

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接