【问题标题】:NSTextField leaking when handling key events处理关键事件时 NSTextField 泄漏
【发布时间】:2011-10-30 05:02:24
【问题描述】:

我是这个论坛的新手,我已经搜索过但没有找到这个问题的任何答案,这个问题一直困扰着我本周的大部分时间。

NSTextField 每次按键都会导致内存泄漏。

我已将这个问题从我的代码中分离出来,它可以重现如下:

  • 创建一个新的“Cocoa 应用程序”项目。
  • 在主菜单 xib 窗口中放置一个 NSTextfield。 (无约束力、出口或行动)
  • 产品 -> 配置文件,选择“内存泄漏”工具(在 XCode 4 中)

在用户在文本字段中输入字符之前不会泄漏。 我得到了 8 个泄露的 32 字节的以下类型的 NSCFString 对象:

图书馆负责呼叫者 0 CFString Malloc 00:11.524.538 1 0x100130bb0 32 AppKit-[NSEvent charactersIgnoringModifiers] 1 CFString Malloc 00:11.622.145 1 0x100136950 32 AppKit-[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:]

请注意,这个项目除了自动生成的东西之外没有其他代码。

如果其他人可以重现此问题,甚至可能提供如何防止它发生的建议,我会很感兴趣。

带有 XCode 4.0.2 的 OS X 10.6.8(3.2.6 也会出现同样的问题)

任何建议都将不胜感激,并会减少我目前的挫败感。

更新:

在不同的 Mac 上尝试了上述项目创建。 发现其中一个没有产生泄漏(使用与上面相同的过程创建项目) 在从未安装过 XCode 的 Mac 上安装了 XCode 4 - 没有泄漏!

仍在泄漏内存。

  • 在同一个 MPro 上擦除硬盘,安装 OS X 10.6,软件更新到 10.6.8
  • 已安装 XCode4
  • 创建了与上面相同的测试项目

没有内存泄漏!!!!!

现在很明显,这个问题的根源在于安装的某个地方,而不仅仅是 Instruments 的“误报”。我的配置文件运行多次执行,因此只有一次,并且该行为在我的 Mac 上 100% 可重现。

现在的问题:我还有一台 27 英寸的 iMac,其中 HDD 擦除不是一个选项。 我猜有安装的东西(框架?)在升级或重新安装 XCode 时没有得到更新/删除。

非常感谢您对导致此问题的原因提出的想法。

【问题讨论】:

    标签: objective-c cocoa macos memory-leaks xcode4


    【解决方案1】:

    这几乎可以肯定是误报。 Leaks 工具并非万无一失,它可能会将某些东西标记为泄漏,而实际上它们不是(单例是一个常见的例子),请参阅my answer to this question

    我怀疑这里看到的是字段编辑器的创建,它为每个包含至少一个文本字段单元格的窗口创建一次。它是惰性创建的,因此只会在需要时实例化,即在文本编辑开始时。然后它被重新用于该窗口中的所有文本字段编辑,并且在窗口消失之前不会被释放。这正是可以在 Leaks 工具中触发误报的行为。

    NSTextField 等常见对象不太可能发生重大内存泄漏。它们已经过非常彻底的测试,即使在不同的操作系统版本之间也没有太大变化。

    【讨论】:

    • 这是个好消息 - 非常感谢 Rob。唯一困扰我的问题是为什么它在我所有的 Mac 上的行为方式都不一样?
    • 更新了我的问题 - 它看起来不像是“误报”。回到第一方......
    【解决方案2】:

    尝试关闭 XCode,再次打开它,然后在项目上运行“清理”。有时,古代死去的水手的鬼魂居住在 IDE 中,并对毫无戒心的旅行者造成严重破坏。但说真的……这似乎不应该发生。尝试清理并重新启动。

    【讨论】:

    • 感谢您抽出宝贵的时间来回答,但正如您从上面的更新中看到的那样,我不仅重新启动了 XCode,而且还卸载并重新安装了 XCode!虽然我有某种解决方案,但我真的没有答案,仍然在 4 台 Mac 中的 2 台上遇到问题。
    猜你喜欢
    • 2011-07-29
    • 2011-01-13
    • 2012-10-29
    • 2012-05-31
    • 2018-03-17
    • 2015-03-07
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多