iOS解除视图控制器不会释放内存

时间:2017-11-30 02:08:22

标签: ios memory-management memory-leaks weak-references strong-references

我知道在父视图中呈现viewController时,所有这些都是弱强引用...如果我错了请纠正我

这是我如何做的一个例子

let viewHolder = viewClass()

func presentView()  {
    self.present(viewHolder, animated: true) {

    }
}

从打开状态看我的记忆显示器 并反复关闭相同的视图

enter image description here 我试过这个

weak var viewHolder = viewClass()

func presentView()  {
    self.present(viewHolder!, animated: true) {

    }
}

但这会让我崩溃

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

以这种方式解除viewClass(内部关闭)

func dismissPage()  {
    self.dismiss(animated: true)
}

任何帮助将不胜感激  谢谢

2 个答案:

答案 0 :(得分:0)

问题可能不在viewClass中。您在初级课程中声明let viewHolder = viewClass()。因此,当您关闭控制器时,该变量仍然存在。你需要保留它的参考吗?如果没有,你可以在需要显示时轻松分配它,当你关闭它时,内存将被释放:

func presentView()  {
     // instead of saving viewHolder as an instance variable, you declare it locally
    let viewHolder = viewClass()
    self.present(viewHolder, animated: true) {

    }
}

答案 1 :(得分:0)

  1. 使用deint方法并在关闭viewcontroller后检查它是否被调用。

  2. 如果你使用任何类型的块或闭合来完成工作,那么在你的闭合边使用[弱自我]。

  3. 只有在没有视图控制器出现或推送之后,你还可以在viewDidDis出现时将你的属性/委托/变量设为nil