[英]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.