【问题标题】:Memory leaks Xcode 8 instrument内存泄漏 Xcode 8 仪器
【发布时间】:2017-01-16 19:45:16
【问题描述】:

我在我的视图控制器上什么也没做,我看到应用程序运行时图表正在发生变化。

这真的是泄漏吗?

第一次显示绿色复选标记,然后显示 1 个泄漏,然后没有新的泄漏。

所以这意味着没有泄漏或仍然有 1 个泄漏但不是新的?

我实际上有一个包含经理强引用的应用程序委托。

class AppDelegate {

var applicationManager = ApplicationManager()

}

我在 ApplicationManager 中的服务很少

class ApplicationManager
{
  lazy var apiService: APIService = {

    let service = APIService()

    return service

  }()

  lazy var facebookService: FacebookService = {

    let service = FacebookService()

    return service

  }()
}

我有一个功能

func logInUser()
  {
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
      fatalError()
    }

    let apiService = appDelegate.applicationManager.apiService

    guard let email = emailTextField.text, let password = passwordTextField.text else {
      return
    }
    apiService.loginUserWith(email, password: password) {(result) in
}

这段代码会导致问题吗?

使用我也看到的新工具

我有一个泄漏的对象(它在另一个以前的项目中),但管理器和服务的实现相同。

【问题讨论】:

  • 泄漏就是泄漏;一旦一个对象泄漏了,它就永远泄漏了。但这只是一个对象,一次,所以也许你并不在乎。如果您愿意,可以使用 Instruments 来跟踪相关对象的内存管理。
  • @matt,也许是错的,是的,我明白了)但奇怪的是我只分配的服务导致泄露,我可以分享源代码吗?
  • 有一个泄漏报告错误stackoverflow.com/questions/39944703/… 所以你的泄漏可能不是真实的。
  • @matt,是的,可能,我还添加了项目,所以这里只有 2 个分类和几行导致泄漏的代码)感谢您的帮助 github.com/matrosovDev/TestXcode8Leaks
  • 我从 github 下载了你的项目并运行它。我没有看到任何泄漏,无论是在 Instruments 中还是在 Xcode 的 Memory Graph 中。

标签: ios swift xcode memory-leaks


【解决方案1】:

我将建议实际上没有泄漏。 Xcode 8.2 发行说明说:

macOS 和 iOS 模拟器的内存调试器修复了包含枚举类型字段或从某些 Objective-C 框架类继承的类的 Swift 类的错误内存泄漏报告。 (27932061)

您使用的是 Xcode 8.1,因此我们知道在此版本中存在“报告 Swift 类的错误内存泄漏”(尽管在什么确切情况下,以及即使在 Xcode 8.2 中该错误是否已完全修复,仍不清楚我)。

此外,我下载了您的 github 示例项目并在 Xcode 8.2.1 中运行它,并且在 Instruments 和内存图中均未报告任何泄漏。这是 Instruments 的输出:

【讨论】:

  • 感谢您的帮助!)真的很感激,因为我以为我所有的应用程序都是用漏洞编写的,这太疯狂了)感谢上帝和你
猜你喜欢
  • 1970-01-01
  • 2014-11-16
  • 2012-07-06
  • 2011-02-15
  • 2010-11-26
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 2012-05-07
相关资源
最近更新 更多