有关 Instruments 工具的 iOS 问题、我的应用程序中的内存问题

标签 ios xcode memory-management instruments

我刚刚开始学习 Instruments 工具,我很确定我所看到的并不好。当我查看分配时,特别是“实时字节数”和“总体字节数”列时,我发现随着应用程序运行,数字不断增加......

我的应用程序有两个 View Controller 。一个 TableView 和第二个 View Controller 显示有关他们在 TableView 中选择的行的详细信息,这些信息是从互联网下载的。

我不断点击表格 View 中的一行,然后点击导航栏中的后退按钮……LiveBytes 继续增加。

我猜这意味着我的对象没有从内存中释放......但如果我错了,请纠正我。

我的问题是:如何使用工具/分配中的数据来追踪此内存问题?如何找到没有从内存中释放的对象?

我正在寻找有关如何使用这些工具来清理我的应用程序存在的任何内存问题的提示。

谢谢!

XCODE 4.2.1,部署到 iOS 5.0+

编辑:我正在查看 #living 列,看到像 UIScrollView 这样的对象不断增加......并且永远不会减少。当我单击导航栏中的后退按钮时,对象是否会自动从内存中释放?对象什么时候释放,或者我需要手动释放?或者我可能会因为使用强指针而遇到问题,导致对象无法释放?

最佳答案

每当您想要以循环模式观察内存使用情况时,“分配”工具中都有精彩的Heapshot 分析

  1. 启动您的应用并进入默认状态。
  2. 在 Instruments 中,按“Mark Heap”按钮创建“Baseline”。
  3. 在您的应用中执行一些操作,例如推送 View Controller 。
  4. 返回默认状态。
  5. 再次按“标记堆”按钮即可创建堆快照。
  6. 从第 3 步开始重复大约五次。

这将生成一个堆快照列表,每个堆快照都显示该周期中仍处于事件状态的对象。如果您的应用程序没有泄漏,则中间堆快照中不会留下任何对象。

前一个或两个周期可能已经预热了一些缓存,后两个周期可能没有清理一些重用的资源。这就是为什么进行四到六次连续射击通常是个好主意。

堆快照分析的神奇之处在于,堆快照会向您显示之前周期中泄漏的对象,并在稍后释放对象时自动删除它们。与“Leaks”工具相反,它还可以发现废弃的内存,而不仅仅是泄漏。

关于有关 Instruments 工具的 iOS 问题、我的应用程序中的内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11528574/

相关文章:

ios - 如何停止主 ui 线程,直到我收到来自 http 请求的响应

ios - tableView.reloadData() 添加了一个它不应该做的 UIView

c++ - Xcode 无法识别析构函数

iphone - NSMutableString 在追加或替换OccurrencesOfString 时泄漏

ios - Swift 中 BLE 的后台扫描

ios - 我如何将协调器与 UIITabBarController 一起使用?

ios - 在代码中设置 "User Defined Runtime Attributes"

ios - 在 iOS 模拟器上记录和回放用户操作?

linux - Matlab 图内存未释放

objective-c - 返回 Objective-C 对象时的内存管理