Je développe une application iPhone 3.1.3.Fuite de mémoire AVAudioRecorder
J'ai le code suivant dans viewDidLoad
méthode:
NSURL *url = [NSURL fileURLWithPath:@"/dev/null"];
NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat: 44100.0], AVSampleRateKey,
[NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey,
[NSNumber numberWithInt: 2], AVNumberOfChannelsKey,
[NSNumber numberWithInt: AVAudioQualityMax], AVEncoderAudioQualityKey,
nil];
NSError *error;
if (recorder == nil)
recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error];
if (recorder) {
[recorder prepareToRecord];
recorder.meteringEnabled = YES;
[recorder record];
levelTimer = [NSTimer scheduledTimerWithTimeInterval: 0.03
target: self
selector: @selector(levelTimerCallback:)
userInfo: nil
repeats: YES];
Note: je vérifie si recorder
a été créé avant de créer une nouvelle avec ce code dans viewDidLoad
:
if (recorder == nil)
recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error];
Quand je me déplace de ce ViewController à un autre ViewController je fais ceci:
[levelTimer invalidate];
levelTimer = nil;
[recorder pause];
Et enfin, je libère recorder
sur dealloc
:
- (void)dealloc {
if (recorder != nil) {
[recorder release];
}
}
en cours avec l'option Xcode 'Exécuter avec outil de performance', la recherche de fuites, je reçois des fuites avec AVAudioRecorder
.
Le programme passera de ce premier ViewController à un second ViewController. Et puis, quand l'utilisateur le veut, il passera du second ViewController au premier ViewController et lancera le premier code que j'ai ajouté.
Y at-il un problème de mémoire? Connaissez-vous une meilleure façon de faire cela? Je veux éviter d'être enregistré pendant que l'utilisateur est dans second viewController.
Je le publie sur dealloc. – VansFannel
J'ai mis à jour ma question avec plus de détails. Je vérifie si l'enregistreur == nil pour en créer un nouveau, donc je ne pense pas en créer un sur chaque rechargement de vue. – VansFannel