
在我的项目中,当我开始在内存图调试器中查找泄漏时,我发现很少并修复了它们,现在内存图中没有发现泄漏。仪器的问题->泄漏,有时显示泄漏,有时不显示,泄漏从一开始就出现在照片中,我几乎不知道是什么导致了泄漏。如果内存图显示没有泄漏,我能信任它吗?或者有一种不被记忆图捕捉到的漏洞。如何初始化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
}发布于 2020-07-03 15:42:38
在2013年的视频( 修复内存问题)中,苹果对“泄漏”、“废弃内存”和“缓存内存”进行了区分。有关更多当代讨论,请参见WWDC 2021视频检测和诊断内存问题、WWDC 2019视频开始使用仪器和WWDC 2018视频iOS内存深潜。
malloc编辑但从未被freed访问的内存。“调试内存图”擅长于查找和可视化强引用周期产生的问题。“泄密”文书将无法查明这些问题。由于强大的引用周期等,在Swift代码中更为普遍,通常“调试内存图”是一个更有成效的第一道防线。
在调试内存问题时,当我们遍历应用程序时,我们不太担心第一次和第二次迭代之间的内存使用情况,而是关注后续的迭代。
无论如何,“泄漏”工具和“调试内存图”都集中在不同的问题上,并会产生不同的结果。泄漏找不到强的参考周期。同时,“调试内存图”功能在查找传统泄漏方面也有了更好的表现。
FWIW,在Swift中,强参考周期远比传统的malloc-但没有free泄漏更常见.除非您开始钻研缓冲区的手动分配、非托管核心基础API等,否则Swift代码不太可能出现传统的泄漏。
如果你在你的应用程序中看到内存的增长,在你担心泄漏之前,确保这不是上述视频中发现的第三个内存问题,即缓存内存,它可能不会再被使用,但是当设备内存不足时会自动回收。
顺便说一句,偶尔会有报道说操作系统或框架中隐藏了漏洞。如果(a)你没有看到你的目标在堆栈跟踪中被引用;或(b)泄漏是没有后果的,那么我可能建议你不要太担心它们。在您的例子中,我们讨论的是384字节,而不是我太担心的事情。
https://stackoverflow.com/questions/62716045
复制相似问题