gpt4 book ai didi

objective-c - 处理关键事件时 NSTextField 泄漏

转载 作者:搜寻专家 更新时间:2023-10-30 20:26:43 25 4
gpt4 key购买 nike

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

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

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

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

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

Library     Responsible Caller0     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,其中硬盘删除不是一个选项。我猜安装了一些东西(Framework?),但在升级或重新安装 XCode 时不会更新/删除。

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

最佳答案

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

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

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

关于objective-c - 处理关键事件时 NSTextField 泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7115007/

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