我正在使用...播放系统声音
NSString *path = [NSString stringWithFormat:@"%@%@",
[[NSBundle mainBundle] resourcePath],
@"/heartbeat.wav"];
//declare a system sound id
SystemSoundID soundID4;
//Get a URL for the sound file
NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
//Use audio sevices to create the sound
AudioServicesCreateSystemSoundID((__bridge_retained CFURLRef)filePath, &soundID4);
//Use audio services to play the sound
AudioServicesPlaySystemSound(soundID4);
AudioServicesDisposeSystemSoundID(soundID4);
我不确定这是问题..但如果它以“分析”运行,则会出现潜在的泄漏。随着我在模拟器中运行更多次,应用变得越来越慢,显然会出现某种泄漏。我已经找到了如何在不使用arc的情况下处理这个问题的示例,但没有使用。任何建议都将不胜感激。
答案 0 :(得分:1)
“它出现了潜在的泄漏”。什么是“它”?
其次,您不会通过观察程序越来越慢来分析内存泄漏。实际上,这不是内存泄漏的正常症状,除非您耗尽物理RAM并导致大量交换。您可以通过使用泄漏工具等实际识别不再可访问的内存来诊断泄漏。
那就是说,你不想要__bridge_retained
,你只需要__bridge
。我更喜欢CFBridgingRetain()
和CFBridgingRelease()
函数而不是__bridge_retained
和__bridge_transfer
强制转换的原因之一是您不太可能犯这样的错误。例如,你从未写过:
AudioServicesCreateSystemSoundID(CFBridgingRetain(filePath), &soundID4);
首先,显而易见的是,不需要保留filePath
只是为了将其传递给函数。其次,调用CFRetain()
- 样式函数也可以清楚地表明您有责任调用CFRelease()
- 样式函数来平衡它。