我有几个关于内存管理的问题。我正在使用 ARC,xcode 4.2.1,部署到 ios 5.0+
1) 您如何知道您的应用何时有效且正确地管理内存?如果它没有泄漏内存,正如您在仪器泄漏工具中测量的那样,那么您的应用程序是否完全健康?
2) 我是否应该使用 Leaks 以外的其他工具来确定我的应用程序是否能很好地管理内存?
3) 随着我继续运行我的应用程序,我的实时字节数不断增长。我的应用程序有一个 UITableView 显示一些数据。当用户单击一行时,我会将他们带到更详细的页面。如果这就是我的应用程序正在做的所有事情,为什么我的事件字节继续增长?不应该释放所有对象,将我的事件字节降低到我第一次启动应用程序时的状态吗?
4)究竟什么是malloc?
我即将完成应用程序,我只想知道如何衡量应用程序是否可发布,以及如何识别任何问题。
谢谢!
最佳答案
How do you know when your app is managing memory efficiently and correctly?
Should I be using other tools other than Leaks to determine if my app is managing memory well?
Instruments 中的各种工具应该足以帮助您了解应用程序如何使用内存。您可能要考虑做的一件事是保存 Instruments session 的结果以及一些注释,以便您可以看到应用程序的内存使用如何随时间变化。
My live bytes keeps growing as I continue to run my app.
这可能是也可能不是问题;了解不断添加的 block 中的内容会有所帮助。如果设备上有可用内存,使用它并没有什么问题,特别是如果这意味着您的应用程序性能更好,可以避免从某个来源下载类似的数据等。但是如果您的应用程序不断分配新的 View Controller 和 View 而不释放旧的,这可能是泄漏。
What exactly is a malloc?
malloc()
是 C 标准库中的内存分配函数之一。我感觉你在问,因为你在 Allocations 工具的 Category 列中看到像 Malloc 16 bytes 这样的行:这些行代表由
malloc()
分配的一类内存块。 .如您所见,在我的例子中,我有来自 malloc()
的 3318 个 16 字节 block 。目前在我的程序中使用。确切的数字并不那么重要——您关心的是该数字如何随时间变化。如果你发现一些 malloc()
每次执行某些操作时都会使用 block 并且永远不会释放 block ,您将知道在程序中的何处查找内存问题。 (当然,任何其他类型的 block 也是如此。)
关于iOS 内存管理工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11552255/