【问题标题】:What happens to memory when removing view from view controller without release?从视图控制器中删除视图而不释放时内存会发生什么?
【发布时间】:2011-07-02 01:26:49
【问题描述】:

如果我从视图控制器中删除唯一的视图:[myViewController.view removeFromSuperview] 没有 [myViewController release]。内存会被释放吗?

【问题讨论】:

    标签: objective-c ios cocoa-touch memory-management uiviewcontroller


    【解决方案1】:

    来自 Apple 的 UIView-removeFromSuperview 文档:

    If the receiver’s superview is not nil,superview发布 接收者。如果您打算重用视图, 打电话前一定要保留 这个方法,稍后再释放 视情况而定。

    【讨论】:

      【解决方案2】:

      没有。 除非你在分配时写了自动释放,或者在添加后释放。

      【讨论】:

      • 然后它几乎会立即被释放,这不是很有用。
      • 不,不会。当您将子视图添加到视图时,它会被保留。
      • 您的答案假定在 user523234 的代码中存在另一个对视图的引用并保留在该视图上。通常的做法是通过任何方式创建子视图,将其添加到其父视图中,并且对其进行声明,所以我不明白这个假设来自哪里。换句话说,既然你放在“除非”之后的情况是预期的,那么回答“否”是没有意义的。
      • @Josh:是的,“除非”情况是通常的处理方式,但 removeFromSuperview 不会直接导致内存被释放。可能,如果您以“通常的方式”做事,但也许您出于某种原因没有这样做(或者您可能不知道通常的方式),在这种情况下它不会。例如,我不确定 tc 是否知道“通常的方式”,因为他/她写道,该视图将几乎立即被释放,如果您将其作为子视图添加到视图中,则不是这样,因为它当时被保留。:
      • 我将“它”解释为 VC。 VC 保留视图(直到当视图没有父视图时它收到内存警告)。该问题没有指定保留 VC 的内容,但是如果您在将视图添加到层​​次结构后(自动)释放,那么它会立即“几乎”被释放,这是相当没用的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 2014-10-04
      • 1970-01-01
      • 2013-09-08
      相关资源
      最近更新 更多