iOS 内存管理工具

标签 ios xcode memory

我有几个关于内存管理的问题。我正在使用 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 这样的行:

    illustration from Instruments

    这些行代表由 malloc() 分配的一类内存块。 .如您所见,在我的例子中,我有来自 malloc() 的 3318 个 16 字节 block 。目前在我的程序中使用。确切的数字并不那么重要——您关心的是该数字如何随时间变化。如果你发现一些 malloc()每次执行某些操作时都会使用 block 并且永远不会释放 block ,您将知道在程序中的何处查找内存问题。 (当然,任何其他类型的 block 也是如此。)

    关于iOS 内存管理工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11552255/

    相关文章:

    objective-c - 经纬度中点到直线的最小距离

    objective-c - 未知类型名称

    iOS 应用企业部署 : Provisioning Profile for Libraries

    c++ - 指针包含什么类型的数据

    ios - 如何使用标签或标识符将多张图片添加到自定义表格 View 单元格

    ios - Swift 中的数组到 JSON 数组

    ios - 如何在 Xcode5 中删除单元测试的目标?

    iOS Earl Gray - 选择缺少的参数

    Swift 显式与推断类型 : Memory Efficiency

    python - 避免 Python 函数内重复的大数组计算