簡體   English   中英

CFBridgingRetain的靜態分析器泄漏警告

[英]Static Analyzer Leak Warnings for CFBridgingRetain

有人可以告訴我為什么會泄漏嗎? 我正在使用CFRelease(),我認為它發布了CFURLRef soundFileURLRef

調用函數'CFBridgingRetain'返回一個帶有+1保留計數的Core Foundation對象
對象泄漏:以后在此執行路徑中未引用已分配的對象,並且保留計數為+1

  -(void) playGuitarNote:(NSString *)noteVal {

    AudioServicesDisposeSystemSoundID(soundId);
    CFBundleRef mainBundle = CFBundleGetMainBundle();
    CFURLRef soundFileURLRef = CFBundleCopyResourceURL(mainBundle,CFBridgingRetain(noteVal), CFSTR("aiff"), NULL);
    AudioServicesCreateSystemSoundID(soundFileURLRef, &soundId);
    AudioServicesPlaySystemSound(soundId);
    CFRelease(soundFileURLRef);
    noteVal = nil;

}

您不應該在那里調用CFBridgingRetain() 你應該使用__bridge演員:

CFURLRef soundFileURLRef = CFBundleCopyResourceURL(mainBundle,(__bridge CFStringRef)noteVal, CFSTR("aiff"), NULL);

您沒有更改noteVal的所有權,您只是傳遞它並告訴編譯器將其視為不同(但兼容)類型。

您必須調用CFBridingRelease()以減少保留計數。 因此,存儲指向CFBridgingRetain()返回的對象的指針,並在不再需要它時釋放它。

請參閱基礎功能文檔

或者你可以使用橋接而不是調用CFBridgingRetain()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM