【问题标题】:UIView and UIViewController get deallocated, but memory is not freedUIView 和 UIViewController 被释放,但内存没有被释放
【发布时间】:2018-08-27 11:21:40
【问题描述】:

我注意到在我的应用程序中,有时当视图或视图控制器被释放时,分配给它们的内存不会被释放。这可能是什么原因?

我定义了deinit 方法来验证视图和视图控制器是否被释放(deinit 被调用)。我有时会说,因为在其他一些情况下,当我删除视图时,内存确实会被释放。我注意到的另一件事是,当我添加视图时,内存使用量上升,然后我删除该视图(调用deinit),内存使用量保持不变,但同一视图的后续视图添加不会影响用法。

视图在方法中创建并由View.addSubview(UIView) 添加。在视图中,有一个按钮调用View.removeFromSuperView()。

【问题讨论】:

    标签: ios swift memory-management memory-leaks


    【解决方案1】:

    请尝试以下方法:

    autoreleasepool {
        View.removeFromSuperView() // not sure why you capitalized View but repeating it here just to match your code.
    }
    

    这让 iOS 有机会释放自动释放对象。无论如何,它们最终会自动释放,就像系统需要更多内存一样,但这允许您强制它提前发生。这个SO answer 更详细地解释了它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 2011-10-16
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多