Sto cercando di riprodurre un suono clic su ogni pulsante di scatto nella mia app Per questo ho creato una classe di utilità il cui .he .m è la seguentePerdita di memoria quando mantenendo proprietà
file h
@interface SoundPlayUtil : NSObject<AVAudioPlayerDelegate,AVAudioSessionDelegate>
{
AVAudioPlayer *audioplayer;
}
@property (retain, nonatomic) AVAudioPlayer *audioplayer;
-(id)initWithDefaultClickSoundName;
-(void)playIfSoundisEnabled;
@end
di file .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
e sul pulsante di scatto su qualsiasi classe che sto facendo
SoundPlayUtil *obj = [[SoundPlayUtil alloc] initWithDefaultClickSoundName];
[obj playIfSoundisEnabled];
[obj release];
È funzionante e sono riuscito a riprodurre il suono. Il problema sorge quando ho analizzato il codice. Il compilatore mostra che c'è una perdita di memoria nel metodo initWithDefaultClickSoundName in .m della classe di utilità mentre invio il metodo di allocazione a self.audioplayer e non lo rilascia.
Qual è il posto migliore per liberare questo oggetto?
Si sta utilizzando ARC? –
No, Non si utilizza ARC –