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()後顯示。現在,每次我調用此函數時,不是創建對筆尖的引用,而是每次創建一次引用並使用該引用。所以泄漏消失了:)。無論如何,謝謝你的回覆:) –