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。問題は、nibファイルに2つの最上位オブジェクトがあることです。私もそれらをリリースする必要がありますか?もしそうなら、私は他のウィンドウのWindowRefを作成していない場合、どうすればそれらを解放できますか? –
DisposeWindow()コールの後にリークがまだ表示されていますか? Cocoaでは、すべての最上位オブジェクトを解放する必要があります。この場合、私は確信が持てません - 他のものを作成していないので、あなたは有効なポイントを持っています。 – iccir
はい、DisposeWindow()の後もリークが表示されていました。今度は、この関数を呼び出すたびにnibへの参照を作成するのではなく、参照を一度しか作成せず、その参照を毎回使用しています。だから漏れは消えている。とにかく、お返事ありがとうございます:) –