0

我知道在父视图中显示 viewController 时,这都是弱强引用...如果我错了,请纠正我

这是我如何做的一个例子

let viewHolder = viewClass()

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

    }
}

仅从打开状态查看我的内存监视器并一遍又一遍地关闭相同的视图

在此处输入图像描述 我试过这个

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)
}

任何帮助将不胜感激谢谢

4

2 回答 2

1

问题可能不在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) {

    }
}
于 2017-11-30T04:28:47.750 回答
1
  1. 使用 deint 方法并检查关闭视图控制器后是否调用它的天气。

  2. 如果您使用任何类型的块或闭包来完成工作,那么在您的闭包中使用 [weak self]。

  3. 您也可以在 viewDidDisappeared 时将您的属性/委托/变量设为 nil,前提是在没有视图控制器将被呈现或推送之后
于 2017-11-30T06:27:31.103 回答