Странно, что у вас не возникает утечек, когда вы снова и снова запускаете пузыри.
Любым способом:
Если вы воспроизводите звуковые эффекты коротких кнопок, лучше попробуйте использовать " SystemSoundID ", а не AVAudioPlayer. вот что рекомендует яблоко.
Etited
У Apple есть отличный пример, который включает этот файл -
.h файл
#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioServices.h>
@interface SoundEffect : NSObject {
SystemSoundID _soundID;
}
+ (id)soundEffectWithContentsOfFile:(NSString *)aPath;
- (id)initWithContentsOfFile:(NSString *)path;
- (void)play;
@end
.m файл
#import "SoundEffect.h"
@implementation SoundEffect
+ (id)soundEffectWithContentsOfFile:(NSString *)aPath {
if (aPath) {
return [[[SoundEffect alloc] initWithContentsOfFile:aPath] autorelease];
}
return nil;
}
- (id)initWithContentsOfFile:(NSString *)path {
self = [super init];
if (self != nil) {
NSURL *aFileURL = [NSURL fileURLWithPath:path isDirectory:NO];
if (aFileURL != nil) {
SystemSoundID aSoundID;
OSStatus error = AudioServicesCreateSystemSoundID((CFURLRef)aFileURL, &aSoundID);
if (error == kAudioServicesNoError) { // success
_soundID = aSoundID;
} else {
NSLog(@"Error %ld loading sound at path: %@", error, path);
[self release], self = nil;
}
} else {
NSLog(@"NSURL is nil for path: %@", path);
[self release], self = nil;
}
}
return self;
}
-(void)dealloc {
AudioServicesDisposeSystemSoundID(_soundID);
[super dealloc];
}
-(void)play {
AudioServicesPlaySystemSound(_soundID);
}
@end
Теперь вы можете подготовить звуки в вашем представлении загружен -
NSBundle *mainBundle = [NSBundle mainBundle];
sound1 = [[SoundEffect alloc] initWithContentsOfFile:[mainBundle pathForResource:@"doorloop1" ofType:@"caf"]];
sound2 = [[SoundEffect alloc] initWithContentsOfFile:[mainBundle pathForResource:@"doorloop1" ofType:@"caf"]];
И наконец в вашем действии
-(IBAction) getBubbles:(id)sender {
[sound1 play];
}
Не забудьте издать звуки.