Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS内存泄漏,内存图调试器显示无泄漏,但并行Xcode Instruments泄漏显示泄漏_Ios_Swift_Memory Leaks_Xcode Instruments_Memory Graph Debugger - Fatal编程技术网

iOS内存泄漏,内存图调试器显示无泄漏,但并行Xcode Instruments泄漏显示泄漏

iOS内存泄漏,内存图调试器显示无泄漏,但并行Xcode Instruments泄漏显示泄漏,ios,swift,memory-leaks,xcode-instruments,memory-graph-debugger,Ios,Swift,Memory Leaks,Xcode Instruments,Memory Graph Debugger,在我的项目中,当我开始在内存图调试器中查找泄漏时,我发现了一些并修复了它们,现在使用内存图没有发现泄漏。仪器->泄漏的问题,有时显示泄漏,有时不显示泄漏,泄漏从一开始就立即出现,如照片中所述,我几乎不了解泄漏的原因。如果内存图显示没有泄漏,我可以相信它吗?或者存在一种内存图无法捕捉到的泄漏。如何初始化mainViewController的代码: func application(_ application: UIApplication, didFinishLaunchingWithOptio

在我的项目中,当我开始在内存图调试器中查找泄漏时,我发现了一些并修复了它们,现在使用内存图没有发现泄漏。仪器->泄漏的问题,有时显示泄漏,有时不显示泄漏,泄漏从一开始就立即出现,如照片中所述,我几乎不了解泄漏的原因。如果内存图显示没有泄漏,我可以相信它吗?或者存在一种内存图无法捕捉到的泄漏。如何初始化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
        
}
请看这段老视频,它向我们介绍了“泄漏”、“废弃内存”和“缓存内存”之间的区别

泄漏内存是指无法再次访问的内存,即没有剩余引用的内存,即已被malloc'ed但从未释放过的内存。这就是“泄漏”工具所发现的

被抛弃的记忆是不同的。它包含有引用的内存,但不会被再次访问。这就是“调试内存图”功能将发现的内容。最常见的例子是“强参考循环”

缓存内存是指可能不再使用的内存,保存在内存中以便在应用程序再次需要时快速检索。在调试内存问题时,当我们在应用程序中循环时,我们不太担心第一次迭代和第二次迭代之间的内存使用情况,而是关注后续迭代

无论如何,“泄漏”工具和“调试内存图”正在识别两个完全不同的问题,我期望得到不同的结果。在快速、强参考循环中,FWIW比泄漏更为常见。您的SWIFT银行代码不太可能泄漏,除非您开始深入研究缓冲区、非托管核心基础API等的手动分配。 而且经常报告的泄漏是隐藏在操作系统或框架中的问题。考虑到这不在我们的控制范围之内,我建议不要太担心它们,除非它们占用了很多内存。在你的例子中,我们讨论的是384字节,这不是我太担心的


如果你在应用程序中看到内存增长,在担心泄漏之前,请确保这不是上述视频中确定的第三个内存问题,即缓存内存,可能不会再次使用,但当设备内存不足时会自动回收。

我感谢您的解释和详细的回答,真的非常感谢您,我花了20多个小时试图找到解释。