我有一个基于导航的模板,当我使用Instruments运行我的应用程序时,第一个内存泄漏就出现了:
Leak Object: Malloc 128 bytes
Responsible Library: CoreGraphics
Responsible Frame: open_handle_to_dylib_path
我不知道这个泄漏的来源以及如何删除它。
如果这是默认泄漏,那么我认为我不需要担心它。但如果不是,那么我必须找到一种方法来消除泄漏。
答案 0 :(得分:2)
扩展deanWombourne完全正确回答了一下......
Leaks Instrument会显示在应用程序的正常过程中不会被释放的内存(因为没有任何引用)。这本身并不重要,当应用程序退出时它将是免费的。许多框架代码将分配并留下这些非常小的内存块分配。我不知道它们是错误还是应用程序运行的必要条件。无论如何,我们必须接受它们是完全正常的。
泄漏会将这些记忆块识别为“泄漏”并且听起来很糟糕,但这并不是仪器可以帮助您识别的“泄漏”。
“真正的”泄漏在代码中可以运行多次,并且分配一些永远不会释放的内存,因此随着时间的推移会消耗越来越多的内存,直到使用所有内存并且您的应用程序将崩溃。
因此,如果您有一个应用程序,无论您使用它的时间长短,或者无论您如何使用它,它都会在苹果框架中泄漏128个字节,您通常不必担心。
但是,如果你有一个应用程序说,每次你点击一个按钮它会分配一个永远不会释放的新字符串 - 无论字符串有多少字节 - 如果用户按下按钮足够多次,这将消耗全部应用程序可用的内存并最终崩溃。这是你需要注意的那种泄漏。
泄漏仪器实际上无法区分这两种,但你需要能够。您可能需要一种单例对象,例如,只有一个实例,并且需要在应用程序的整个生命周期中存在。您在应用启动时创建对象,实际上您永远不需要释放此对象,它可以在应用程序退出时被终止。泄漏会将其标记为泄漏,而与您合作的其他一些开发人员认为这意味着您不知道自己在做什么会像小孩子一样向老板跑去并说“他写的是真正漏洞的代码,那就是不合时宜的“。而你的老板,不是程序员,会认真对待他,因为听起来确实很糟糕,无论如何,他从一所声名卓着的大学中取得了2.2分的CS,所以他必须知道他在说什么。当它真的完全合理且完全符合您的意图时。
因此,使用Leaks工具查找代码中会破坏应用程序的错误。不要担心在Apple框架中发现'泄漏'的每个字节。
答案 1 :(得分:0)
如果它是一个128字节的泄漏,那么根本不用担心它,有更好的方法来花时间而不是考虑这个:)
答案 2 :(得分:0)