【问题标题】:UITests: deinit is not calledUITests:不调用 deinit
【发布时间】:2015-11-24 15:06:23
【问题描述】:

为什么当我在 Xcode 中测试我的控制器时一切正常,但没有调用 deinit 方法。对吗?

虽然应用正常运行,但没问题,但不适用于UITest 目标。

对于复杂的结构,模拟器会一遍又一遍地分配更多对象,并且...根本不释放它。因此,通常在较慢的机器上,应用有时会无缘无故退出……并且无法完成测试。

使用 Xcode 8、iOS 10、macOS Sierra。

【问题讨论】:

  • 实例是在测试代码中创建的还是在宿主应用代码中创建的?
  • 我认为,在主机应用程序代码中。使用主机应用程序运行的 UITests(不确定)。
  • 您是如何检测到deinit 方法未被调用的?另外,如果可能,请发布测试代码。这可能会有很大帮助。
  • 因为我将断点放在deinit 中,而uitesting 时应用程序没有停止。但是,在我手动编译和使用应用程序时会调用 deinit
  • 对不起,我的错误......在另一个项目中确实调用了init。

标签: ios swift xcode xcode-ui-testing


【解决方案1】:

如果没有看到测试代码示例,我无法明确回答您的问题,但是,您的案例让我对几件事产生了怀疑。

基本上,该应用正在为您运行的每个测试创建新进程。代码内部某处的内存泄漏将是第一个要调查的问题。如果您正在泄漏内存,则测试框架启动一堆进程可能会导致崩溃,并让该问题在正常运行期间不被察觉。

此外,除非您通过测试类中的拆卸功能显式取消初始化控制器,否则该进程通常会在测试结束时被终止。如果您想测试您的重新初始化,我建议在测试中明确触发拆除以测试您的内存分配行为。此外,这里的 Xcode 分析功能可能对您有用。

如果您可以发布一个测试代码示例,这将是一个很大的帮助,我会相应地编辑我的答案。

【讨论】:

    【解决方案2】:

    确保 deinit 不为空。如果它为空,那么它将永远无法工作。将你需要的任何东西释放并检查它是否工作。

    我的建议

     better to use dealloc method rather than using deinit.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-25
      • 2015-01-14
      • 2021-10-22
      • 2018-08-03
      • 2015-08-25
      • 2021-05-16
      • 2018-05-24
      • 1970-01-01
      相关资源
      最近更新 更多