アプリでボタンをクリックするたびにクリック音を鳴らそうとしています。そのために、.hと.mが次のようなユーティリティクラスを作成しました。
.hファイル
@interface SoundPlayUtil : NSObject<AVAudioPlayerDelegate,AVAudioSessionDelegate>
{
AVAudioPlayer *audioplayer;
}
@property (retain, nonatomic) AVAudioPlayer *audioplayer;
-(id)initWithDefaultClickSoundName;
-(void)playIfSoundisEnabled;
@end
.mファイル
@implementation SoundPlayUtil
@synthesize audioplayer;
-(id)initWithDefaultClickSoundName
{
self = [super init];
if (self)
{
NSString* BS_path_blue=[[NSBundle mainBundle]pathForResource:@"click" ofType:@"mp3"];
self.audioplayer =[[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:BS_path_blue] error:NULL];
[self.audioplayer prepareToPlay];
}
return self;
}
-(void)playIfSoundisEnabled
{
if ([[NSUserDefaults standardUserDefaults] boolForKey:soundStatus]==YES)
{
[self.audioplayer play];
}
}
-(void)dealloc
{
[audioplayer release];
[super dealloc];
}
@end
ボタンをクリックして、私が行っているクラスをクリックします
SoundPlayUtil *obj = [[SoundPlayUtil alloc] initWithDefaultClickSoundName];
[obj playIfSoundisEnabled];
[obj release];
それはうまく機能し、私は音を出すことに成功しました。コードを分析すると問題が発生します。コンパイラは、allocメソッドをself.audioplayerに送信していて解放していないため、ユーティリティクラスの.mのinitWithDefaultClickSoundNameメソッドにメモリリークがあることを示しています。
このオブジェクトを解放するのに最適な場所はどこですか?