【问题标题】:Problem: message sent to deallocated instance问题:消息发送到解除分配的实例
【发布时间】:2020-07-02 21:59:58
【问题描述】:

我在HomeViewController 中有一些代码。当我打开下一个控制器并点击按钮并执行时

let strotyboard = UIStoryboard(name: "Anketa", bundle: nil)
    if let anketaController = strotyboard.instantiateViewController(withIdentifier: "QuestionnaireViewController") as? QuestionnaireViewController {
        anketaController.startNew = true
        print("1111 HomeViewController openNext , ", anketaController)
        present(anketaController, animated: true, completion: nil)
    }

当我返回HomeViewController 并再次点击按钮打开QuestionnaireViewController 时,出现错误消息:

“QuestionnaireViewController 保留]:消息发送到已释放实例 0x10480a400”

我打印了 - print("1111 HomeViewController openNext , ", anketaController),我第一次点击按钮是:

1111 HomeViewController openNext ,  <.QuestionnaireViewController: 0x10480a400>

在第二个被点击的按钮上是:

1111 HomeViewController openNext ,  <.QuestionnaireViewController: 0x10901fa00>

应用在 iOS 13 上崩溃

【问题讨论】:

    标签: ios swift xcode crash


    【解决方案1】:

    Omer 的回答可能是正确的。我自己创建保留周期时遇到了很多麻烦(即使经过相当长的时间)。帮助我的是this idea of doing an extension to UIViewController that makes a delayed check on the self pointer to make sure it's deallocated

    如果您的视图控制器在 2 秒后没有被释放,那么您肯定有泄漏,因此您的断言将停止您的代码,您可以使用 XCode 的内存图功能,找到您的视图控制器并查看是什么保留它活着。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-11
      • 2013-06-04
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多