代码之家  ›  专栏  ›  技术社区  ›  Tesserex

Objective-C静态“构造器”-是否需要保留?

  •  1
  • Tesserex  · 技术社区  · 14 年前

    我知道如果我得到一个对象,例如一个NSARRAY,方法如下 [NSArray array] ,它将自动释放。所以我不必做 release 我自己。我的问题是,我这样得到它之后,我必须保留它吗?我不会这么认为的,因为计数从1开始,直到池被释放后才会释放,但当我不释放时,这些对象会出现一些错误的访问错误。为了修复它们,我保留了这些对象,然后自己释放它们。这个案子怎么了?我还没有掌握客观C记忆管理吗?

    3 回复  |  直到 14 年前
        1
  •  3
  •   Barry Wark    14 年前

    我衷心建议你不要再考虑保留计数了。相反,考虑所有权:您想声明一个实例的一部分所有权吗(即,您想确保它一直存在,直到您另有说明)?如果是这样, -retain 它。否则,不要 -保留 它。任何时候你 保持 在一个实例中,您必须 -release 在将来的某个时候,这种兴趣将永远不会被释放。

    您可以假定任何与alloc/new/copy模式不匹配的方法都会返回在其中 拥有所有权权益。如果希望它们停留在当前堆栈帧之外,请保留它们。

    对于这个和所有其他的客观记忆问题,请阅读 Memory Management Programming Guide . 然后重新阅读。再一次。这是对这一主题的权威性引用。它将是你的朋友。

        2
  •  0
  •   Carl Norum    14 年前

    自动释放对象的保留计数将在运行循环结束时递减。因此,如果您有一个对象想要保留的时间比运行循环结束时长,那么您必须保留它。

        3
  •  0
  •   user155959    14 年前

    除非需要声明对象的所有权,否则不会保留。你需要发布一些代码或者描述你在做什么,然后其他人才能帮助你确定你是如何以及为什么会出错的。