0
我在识别内存泄漏时遇到问题。我试过Instruments,它说每次我调用下面描述的函数时都会有内存泄漏。无法获取功能中内存泄漏的位置
CFStringRef getStringFromLocalizedNIB(int cmdId)
{
IBNibRef nibRef;
WindowRef wind=NULL;
CFStringRef alertString;
CreateNibReference(CFSTR("main"), &nibRef);
CreateWindowFromNib(nibRef, CFSTR("Localized Strings"), &wind);
DisposeNibReference(nibRef);
ControlID alertID = {'strn',cmdId};
ControlRef alertRef;
GetControlByID(wind, &alertID,&alertRef);
GetControlData(alertRef, kControlNoPart, kControlStaticTextCFStringTag, sizeof(CFStringRef), &alertString, NULL);
return alertString;
}
每次我调用函数,我释放返回的对象。
CFStringRef lstr;
lstr = getStringFromLocalizedNIB(20);
//Use lstr;
CFRelease(lstr);
那么任何人都可以解释泄漏的位置吗?
感谢@iccir的答复。问题是我的笔尖文件中有2个顶级对象。我还需要释放它们吗?如果是这样,如果我不为其他窗口创建WindowRef,我如何释放它们。 –
在DisposeWindow()调用之后仍然出现泄漏?在Cocoa中,你必须释放所有顶级对象。在这种情况下,我不确定 - 你有一个有效的观点,因为你没有创造其他人。 – iccir
是的,泄漏仍在DisposeWindow()后显示。现在,每次我调用此函数时,不是创建对笔尖的引用,而是每次创建一次引用并使用该引用。所以泄漏消失了:)。无论如何,谢谢你的回复:) –