gpt4 book ai didi

objective-c - 使用垃圾收集时,新创建的 Cocoa 应用程序会出现内存泄漏吗?

转载 作者:行者123 更新时间:2023-12-03 16:26:40 25 4
gpt4 key购买 nike

我决定在我最新的 Cocoa 项目中使用 GC 进行内存管理,并且我发现了一些有趣的东西——如果我在 Xcode 中创建一个全新的 Cocoa 应用程序项目,将 GC 设为支持或必需(我都尝试过),构建,然后运行它,它泄漏,它显示内存泄漏!

主要是 NSCFData、GeneralBlock、CGEvent、CFDictionary、CGSRegion 等类型的对象的大量微小泄漏。

重现步骤:

  1. 文件->新项目->Cocoa 应用
  2. 项目 -> 编辑项目设置 -> 需要 GC(或支持,两者之一)
  3. 构建->构建
  4. 运行->使用性能工具运行->泄漏
  5. 等待泄漏检测触发(我将其设置为 10 秒,默认为 30 秒)

大约 80% 的时间里,我会遇到上面列出的各种对象的大约 2-20 Kb 的泄漏。

其他人也有同样的行为吗?


编辑:我通过重命名 InputManagers 文件夹来测试以下情况(此时日志消息消失,因此它们肯定不再被加载),但仍然出现内存泄漏。所以这似乎与此无关。我将文本留在那里,以便阿什利·克拉克的回答仍然有意义。

我知道的唯一奇怪的情况是,每当我运行启用了 GC 的应用程序时,我都会在控制台中收到以下消息:

2008-12-12 13:03:09.829 MemLeakTest[41819:813] Error loading /Library/InputManagers/Inquisitor/Inquisitor.bundle/Contents/MacOS/Inquisitor:  dlopen(/Library/InputManagers/Inquisitor/Inquisitor.bundle/Contents/MacOS/Inquisitor, 265): no suitable image found.  Did find:
/Library/InputManagers/Inquisitor/Inquisitor.bundle/Contents/MacOS/Inquisitor: GC capability mismatch
2008-12-12 13:03:09.840 MemLeakTest[41819:813] Error loading /Library/InputManagers/Saft/SaftLoader.bundle/Contents/MacOS/SaftLoader: dlopen(/Library/InputManagers/Saft/SaftLoader.bundle/Contents/MacOS/SaftLoader, 265): no suitable image found. Did find:
/Library/InputManagers/Saft/SaftLoader.bundle/Contents/MacOS/SaftLoader: GC capability mismatch

我猜这与这两个插件试图加载到每个启动的程序有关,而不仅仅是 Safari(它们是其插件)。我不确定这是否与此有关,但这似乎确实是一种可能性。我无法方便地使用开发工具来使用干净的 OS X 10.5 来测试在没有 SAFT 或 Inquisitor 的原始安装上是否会发生同样的情况。

最佳答案

leaks 工具在 Leopard 中的 Objective-C 垃圾收集下并不准确,因为它对垃圾收集器的运行时结构了解不够,无法实际确定哪些对象仍然存在,但是准备好被回收。

此外,您对泄漏结果的解释有点错误:看起来泄漏并不是来自 NSCFData、CGEvent 等— 这些所谓的泄漏对象。

如果您认为特定对象在 Objective 下生存时间过长,则可以使用 GDB 中的 info gc-referencesinfo gc-roots 命令 - C 垃圾收集。 Bill Bumgarner 在 this post to Cocoa-Dev 中讨论了它们以及 GC 下“泄漏”的一般概念。 .

关于objective-c - 使用垃圾收集时,新创建的 Cocoa 应用程序会出现内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/364172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com