繁体   English   中英

iOS Memory 泄漏,memory 图形调试器显示没有泄漏,但并行 Xcode-Instruments-leaks 显示泄漏

[英]iOS Memory leaks , memory graph debugger shows no leaks but in parallel Xcode-Instruments-leaks shows leaks

在此处输入图像描述 在我的项目中当我开始在 memory 图形调试器中查找泄漏时,我发现很少并修复了它们,现在使用 memory 图形没有发现泄漏。 Instruments->leaks 的问题,有时它显示泄漏,有时不显示,泄漏从一开始就立即出现,如照片中所述,我几乎不明白导致泄漏的原因。 如果 memory 图表显示没有泄漏,我可以相信它吗? 或者存在一种未被 memory 图捕获的泄漏。 我如何初始化 mainViewController 的代码:

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    self.window = UIWindow()
    
    let controller = MainViewController()
    let navigationController = UINavigationController(rootViewController: controller)
    let rootViewController = navigationController
    self.window?.rootViewController = rootViewController
    self.window?.makeKeyAndVisible()
           
    return true
        
}

在 2013 年的视频Fixing Memory 问题中,Apple 对“泄漏”、“废弃内存”和“缓存内存”进行了区分,如下所述。 有关更多当代讨论,请参阅 WWDC 2021 视频检测和诊断 memory 问题、WWDC 2019 视频开始使用仪器和 WWDC 2018 视频iOS Z4789F3B8D643B1BEF1FA8DZ643B3AEF198

  • Leaked memory is that which can't be accessed again, memory for which there are no references left, ie, memory that has been malloc 'ed but never free 'd.

  • 废弃的 memory 由 memory 组成,其中确实有引用,但不会再次访问。

  • 缓存的 memory可能不会再次使用,保存在 memory 中,以便在应用再次需要时快速检索。

“调试 memory 图”擅长发现和可视化由强参考周期引起的问题。 “泄漏”工具不会识别这些问题。 由于强参考周期等在 Swift 代码中更为普遍,因此“调试 Memory 图表”通常是更有成效的第一道防线。

在调试 memory 问题时,我们较少担心第一次和第二次迭代之间的 memory 使用情况,因为我们循环浏览应用程序,而是关注后续迭代。

无论如何,“Leaks”工具和“debug memory graph”关注的是不同的问题,会产生不同的结果。 泄漏没有找到强参考周期。 同时,“debug memory graph”功能在发现传统漏洞方面也有了很大的进步。

FWIW,在 Swift 中,强参考周期比传统的malloc更常见,但free泄漏。 您的 Swift 代码不太可能存在传统泄漏,除非您开始研究手动分配缓冲区、非托管核心基础 API 等。

如果您在您的应用程序中看到 memory 增长,在您担心泄漏之前,请确保它不是上述视频中确定的第三个 memory 问题,即缓存的 ZCD69B4957F06CD818DZZ 被自动回收,可能会在不再使用时自动回收,但9该设备在 memory 上运行不足。


顺便说一句,偶尔会报告隐藏在操作系统或框架中的泄漏。 如果 (a) 您没有看到堆栈跟踪中引用了您的目标; 或(b)泄漏是无关紧要的,那么我可能建议不要太担心它们。 在您的情况下,我们谈论的是 384 字节,我不会太担心。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM