AVAudioPlayer 导致内存泄漏?释放内存?
AVAudioPlayer causing memory leak? Release memory?
我的 Xcode 应用程序播放许多不同的音频文件。似乎存在最终导致应用程序崩溃的内存泄漏。我应该释放音频播放器的内存吗?我需要什么额外的代码来发布这些?我有大约 400 个音频文件。
NSString *file1Path = [[NSBundle mainBundle] pathForResource:@"50"ofType:@"mp3"];
NSURL *file1URL = [[NSURL alloc] initFileURLWithPath:file1Path];
file1Player = [[AVAudioPlayer alloc] initWithContentsOfURL:file1URL error:nil];
[file1Player play];
我可以只添加这段代码吗?
-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
[file1Player release];
file1Player=nil;
}
您已提议添加 [file1Player release]
。
如果您正在使用自动引用计数,那不仅没有必要,而且是不允许的。但是,如果您正在使用手动引用计数,那么这是必不可少的。但是一定要指定 AVAudioPlayer
的 delegate
否则不会调用该方法。
如果你使用手动引用计数,我建议使用 shift+command+B(或“产品”»“分析”)执行静态分析。特别是在手动引用计数代码中(但即使在 ARC Objective-C 代码中),这个静态分析器也是一个非常有用的工具。在您解决所有在那里发现的问题之前,没有继续进行的意义。
或者,如您所建议,更好的是,将您的手动引用计数项目转换为自动引用计数。
我的 Xcode 应用程序播放许多不同的音频文件。似乎存在最终导致应用程序崩溃的内存泄漏。我应该释放音频播放器的内存吗?我需要什么额外的代码来发布这些?我有大约 400 个音频文件。
NSString *file1Path = [[NSBundle mainBundle] pathForResource:@"50"ofType:@"mp3"];
NSURL *file1URL = [[NSURL alloc] initFileURLWithPath:file1Path];
file1Player = [[AVAudioPlayer alloc] initWithContentsOfURL:file1URL error:nil];
[file1Player play];
我可以只添加这段代码吗?
-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
[file1Player release];
file1Player=nil;
}
您已提议添加 [file1Player release]
。
如果您正在使用自动引用计数,那不仅没有必要,而且是不允许的。但是,如果您正在使用手动引用计数,那么这是必不可少的。但是一定要指定 AVAudioPlayer
的 delegate
否则不会调用该方法。
如果你使用手动引用计数,我建议使用 shift+command+B(或“产品”»“分析”)执行静态分析。特别是在手动引用计数代码中(但即使在 ARC Objective-C 代码中),这个静态分析器也是一个非常有用的工具。在您解决所有在那里发现的问题之前,没有继续进行的意义。
或者,如您所建议,更好的是,将您的手动引用计数项目转换为自动引用计数。