【发布时间】: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 - 没有泄漏!
- 使用此过程在相当新的 MBPro 上未安装 Xcode3.2.6:http://macdevelopertips.com/xcode/how-to-uninstall-xcode.html
- 重新安装 XCode4
仍在泄漏内存。
- 在同一个 MPro 上擦除硬盘,安装 OS X 10.6,软件更新到 10.6.8
- 已安装 XCode4
- 创建了与上面相同的测试项目
没有内存泄漏!!!!!
现在很明显,这个问题的根源在于安装的某个地方,而不仅仅是 Instruments 的“误报”。我的配置文件运行多次执行,因此只有一次,并且该行为在我的 Mac 上 100% 可重现。
现在的问题:我还有一台 27 英寸的 iMac,其中 HDD 擦除不是一个选项。 我猜有安装的东西(框架?)在升级或重新安装 XCode 时没有得到更新/删除。
非常感谢您对导致此问题的原因提出的想法。
【问题讨论】:
标签: objective-c cocoa macos memory-leaks xcode4