【问题标题】:How do I know when to release an NSDate object?我如何知道何时释放 NSDate 对象?
【发布时间】:2011-01-12 15:31:00
【问题描述】:

当我完成这些日期指针中的一个或两个时,需要 [release]。我怎么会知道这个?我不确定,因为我没有明确地进行初始化。

NSDate *date = [NSDate date];

NSDate *date = [dateWithTimeIntervalSince1970:100000000];

【问题讨论】:

    标签: iphone release nsdate


    【解决方案1】:

    不,这些方法返回的两个日期都是自动释放的。您不必担心它们的内存管理,但要成为一个好公民,在完成它们后将指针设置为 nil 是个好主意。

    作为一般规则,您可以遵循我所说的“CARN”规则。在 Cocoa/Cocoa Touch 中,任何包含 Copy、Alloc、Retain、New 字样的方法都会返回需要您在某个时候释放的对象。这些是应用于返回保留计数为 +1 的对象的方法的命名约定。调用这些方法的类“拥有”该对象,并负责在对象完成后释放它。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      两者都是自动释放的,也就是说你不需要自己释放它们。经验法则是,如果您发送 +alloc 或 -copy 或显式保留它,您就拥有一个对象:

      • [[SomeClass alloc] 初始化...]
      • [someObject 副本]
      • [某些对象保留]

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

      【讨论】:

      • 好的,但是发布不正确吗?如果我不明确这样做,它什么时候会发布?
      • 是的,释放不属于你的对象是错误的。这称为“过度释放”,当 -release(或任何其他消息,就此而言)发送到已释放的对象时会导致崩溃。当封闭的 NSAutoreleasePool 被释放/耗尽时,自动释放的对象实际上被释放(如果你不明确使用它们,这会在事件循环的每个循环结束时发生)。请参阅“Cocoa 内存管理编程指南”。
      猜你喜欢
      • 1970-01-01
      • 2013-10-10
      • 2010-11-30
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 2014-02-07
      • 1970-01-01
      相关资源
      最近更新 更多