我是这个论坛的新手,我已经搜索过,但没有找到任何问题的答案,这一直困扰着我本周最好的部分。
每次按下某个键时,NSTextField都会导致内存泄漏。
我已从我的代码中隔离了这个问题,可以按如下方式重现:
在用户在文本字段中输入字符之前不会泄漏。 我得到8个泄漏的NSCFString对象,其中包含以下类型的32字节:
Library Responsible Caller 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 - 没有泄漏!
仍然会泄漏记忆。
没有内存泄漏!!!!!
现在很明显,这个问题的根源在于安装中的某个地方,而不仅仅是仪器的“假阳性”。我的个人资料运行被执行了多次,因此有一次性,并且我的Mac上的行为是100%可重新生成的。
现在出现问题:我还有27英寸的iMac硬盘擦除不是一个选项。 我猜测在安装或重新安装XCode时,安装了一些东西(Framework?)没有得到更新/删除。
非常感谢您对此问题的原因的看法。
答案 0 :(得分:1)
这几乎肯定是误报。 Leaks仪器不是绝对可靠的,并且当它们不是时,它可能将某些东西标记为泄漏(单例是常见的例子),请参阅my answer to this question。
我怀疑这里看到的是字段编辑器的创建,它为每个包含至少一个文本字段单元格的窗口创建一次。它是懒惰创建的,因此只在需要时才会被实例化,即文本编辑开始时。然后将其重新用于该窗口中的所有文本字段编辑,并且在窗口消失之前不会取消分配。这正是可以在泄漏工具中触发误报的行为。
NSTextField
等常见对象极不太可能发生重大内存泄漏。它们经过了彻底的测试,并且在操作系统版本之间没有太大变化。
答案 1 :(得分:0)
尝试关闭XCode,再次打开它,然后在项目上运行“清理”。有时古代死去的水手的鬼魂住在IDE中,对不知情的旅行者造成严重破坏。但严重的是......这似乎不应该发生。尝试清理并重新启动。