- (IBAction) btnFire:(id)sender {
NSString *path = [NSString stringWithFormat:@"%@%@", [[NSBundle mainBundle] resourcePath], @"/gunShot.wav"];
NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
AVPlayer *shotSound = [[AVPlayer alloc] initWithURL:filePath];
[shotSound play];
}
如果我在这里发布shotSound,它将无法播放。同时没有泄漏。
为什么仪器没有泄漏?如何发布shotSound?
答案 0 :(得分:2)
因为当按下按钮时你会一次又一次地需要声音,而不是每次在类级别声明它而不是在按钮中初始化它,你可以在viewDidLoad方法中初始化它,或者你也可以这样做
- (IBAction) btnFire:(id)sender {
if(shotSound==nil)
{
NSString *path = [NSString stringWithFormat:@"%@%@", [[NSBundle mainBundle] resourcePath], @"/gunShot.wav"];
NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
shotSound = [[AVPlayer alloc] initWithURL:filePath];
}
[shotSound play];
}
在dealloc
中发布。如果您希望在此操作上发出声音,则可以使用AVAudioPlayer
。
有时仪器的泄漏无法检测到,在这种情况下,您可以使用构建和分析工具。另外,正如你所说,如果你发布了玩家对象,那么应用程序崩溃可能会导致音频仍在播放并且你释放播放器(不确定)。
答案 1 :(得分:0)
你可以尝试
AVPlayer *shotSound = [AVPlayer playerWithURL:filePath];
注意:这将返回一个新播放器,以播放由给定网址引用的单个视听资源。