有人可以告诉我为什么会泄漏吗?我正在使用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;
}
最佳答案
您不应该在那里 call CFBridgingRetain()
。您应该只使用__bridge
强制转换:
CFURLRef soundFileURLRef = CFBundleCopyResourceURL(mainBundle,(__bridge CFStringRef)noteVal, CFSTR("aiff"), NULL);
您无需更改
noteVal
的所有权,而只是传递它,并告诉编译器将其视为不同(但兼容)的类型。关于objective-c - CFBridgingRetain的静态分析器泄漏警告,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14805100/