Ваш код имеет пару утечек памяти. Вы выделяете экземпляры AVAudioPlayer в своем методе play
, но никогда не освобождаете эти экземпляры. См. Какао управления памятью qguidelines для подробностей. Поскольку экземпляры AVAudioPlayer должны оставаться в памяти для воспроизведения, самое простое решение - добавить переменную-член в ваш класс viewController и установить ее как свойство retain
.
Ради Не повторяйте себя (СУХОЙ) я бы также предложил добавить метод, который инкапсулирует весь код, необходимый для воспроизведения одного файла wav.
Вот как бы я написал этот контроллер вида:
MyViewController.h
@interface MyViewController : UIViewController
{
AVAudioPlayer *player;
}
@property(nonatomic, retain) AVAudioPlayer *player;
- (void)playWavFile:(NSString *)fileName;
- (IBAction)play;
@end
MyViewController.m
@synthesize player;
- (void)dealloc {
[player release];
}
- (void)playWavFile:(NSString *)fileName {
NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:fileName ofType:@"wav"];
if (path != nil) {
AVAudioPlayer *newPlayer;
NSURL *url = [NSURL fileURLWithPath:path];
newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url
error:NULL];
[self setPlayer:newPlayer];
[newPlayer release];
[newPlayer prepareToPlay];
[newPlayer play];
}
}
- (IBAction)play {
if (segments.selectedSegmentIndex == 0) {
[self playWavFile:@"meow"];
}
else if (segments.selectedSegmentIndex == 1) {
[self playWavFile:@"meowloud"];
}
}