【问题标题】:Object with a retain count of 3保留计数为 3 的对象
【发布时间】:2011-07-21 18:16:37
【问题描述】:

我有一个 UIView,它的保留计数为 3,我只是想知道如何释放它以使保留计数为 0?

提前致谢。

【问题讨论】:

  • 永远不要查看对象的保留计数。它具有误导性,以至于毫无用处。
  • 顺便说一下,发布一个单独的问题可能会很有用,说明任何问题导致您查看保留计数以寻找解决方案。

标签: iphone objective-c memory-management uiview


【解决方案1】:

您是使用 +alloc 或 +new 创建的,还是使用名称中包含“copy”一词的方法创建的?您是否向它发送了 -retain 消息?如果不是,您不拥有它,也不得释放它。并停止查看保留计数;这样做只会使实际上一组非常简单的内存管理规则变得过于复杂。

【讨论】:

    【解决方案2】:

    永远不要使用保留计数进行调试。 框架在幕后做了一些疯狂的事情,并且经常会导致您的保留计数与您认为的应该有很大不同。随时释放,除此之外别担心。

    official documentation for -retainCount中所述,

    重要提示:此方法在调试内存管理问题时通常没有价值。因为任何数量的框架对象可能已经保留了一个对象以保存对它的引用,而同时自动释放池可能在一个对象上保存了任何数量的延迟释放,所以您不太可能从中获得有用的信息方法。

    不要依赖-retainCount。其他对象可能会在您不知情的情况下保留您的对象,而自动释放的对象可能会让您对实际保留计数产生错误印象。

    【讨论】:

      【解决方案3】:
      [object release];
      

      但保留计数可能为 3,因为该视图当前正在使用中。你只需要释放一次。任何其他使用它的东西(如父视图或数组)都会在不再需要时释放它。您是否可能需要将其从父视图中移除?

      【讨论】:

      • 你甚至不需要释放它一次,除非你用暗示所有权的方法创建它,或者给它发送一个-retain消息。
      • 当然,但我在原始问题的字里行间阅读。
      猜你喜欢
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 2012-01-17
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      相关资源
      最近更新 更多