跟踪内存泄漏

Posted

技术标签:

【中文标题】跟踪内存泄漏【英文标题】:Tracing memory leak 【发布时间】:2011-02-21 12:24:14 【问题描述】:

我的可可应用程序中存在内存泄漏,我已尽一切可能找到它的所有者,但一直无法找到。几天前,当我实现 AsyncSocket 框架的 GCD 版本时,泄漏就开始了。我不知道是我自己的代码导致泄漏出现还是库本身。 Instruments 不提供良好的回溯。唯一模糊的一点:

   0 libSystem.B.dylib calloc
   1 CoreFoundation __addHandler2
   2 Foundation +[__NSObserver isAnObserver:]
   3 Foundation -[NSNotificationCenter removeObserver:name:object:]
   4 Foundation -[NSNotificationCenter removeObserver:]
   5 Foundation -[NSRunLoop(NSRunLoop) dealloc]
   6 CoreFoundation CFRelease
   7 CoreFoundation __CFFinalizeRunLoop
   8 libSystem.B.dylib _pthread_tsd_cleanup
   9 libSystem.B.dylib _pthread_exit
  10 libSystem.B.dylib start_wqthread

有人可以为我指出进行更高级跟踪或逆向工程等所需的方向吗?

【问题讨论】:

【参考方案1】:

您是否尝试过对您的应用进行构建和分析?这有助于发现有时可能被忽略的基于分配释放的内存泄漏。您还可以将库与导入项目的源文件一起使用,然后进行构建和分析以对库运行分析。

【讨论】:

【参考方案2】:

如果您的某些对象将自己作为观察者添加到 NSNotificationCenter,请确保在这些对象被释放之前执行 removeObserver:。

【讨论】:

以上是关于跟踪内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章