AVAudioPlayer-Speicherverlust

Ich habe ein seltsames Problem mit Speicherverlusten im Zusammenhang mit dem AVAudioPlayer und brauche Hilfe, nachdem ich alles ausprobiert habe, was mir in den Sinn gekommen ist.

Hier ist die kurze Beschreibung des Problems - der Code erscheint gleich danach. Ich initialisiere meinen Player und beginne, den Soundtrack in einer Endlosschleife abzuspielen (und Endlosschleife oder einmaliges Abspielen haben das Problem nicht geändert). Einige Sekunden, nachdem die Musik gestartet wurde, wechsle ich zu einem anderen Soundtrack. Daher erstelle ich einen neuen Player, initialisiere ihn, lasse den alten (der gerade abgespielt wird) los und setze dann den neuen ein und spiele ihn ab.

Zu diesem Zeitpunkt (direkt nachdem ich den neuen Player aufgerufen habe - [Player abspielen]) erhalte ich einen Speicherverlust (von 3,5 KB).

Ich habe folgendes versucht:

Stoppen Sie den alten Player und lassen Sie ihn dann los - ohne Wirkung

Lassen Sie den Player direkt nach der Spielanweisung los - hat nicht mit dem Spielen begonnen

Lasse den alten Spieler zweimal frei - stürze ab

Ein Speicherverlust tritt NICHT auf, wenn ich den ersten Player erstelle und wiedergebe!

In der Referenz heißt es auch, dass das "Spielen" asynchron ist und daher wahrscheinlich die Ref-Anzahl um 1 erhöht. Aber warum hat [Player Stop] in diesem Fall nicht geholfen?

Vielen Dank,

Hier sind einige Teile des Codes zur Verwendung:

- (void) loadAndActivateAudioFunction {
NSBundle        *mainBundle = [NSBundle mainBundle];
NSError         *error;
NSURL           *audioURL = [NSURL fileURLWithPath:[mainBundle pathForResource: Name ofType: Type]];
AVAudioPlayer   *player = [(AVAudioPlayer*) [AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:&error];

if (!player) {
    DebugLog(@"Audio Load Error: no Player: %@", [error localizedDescription]);
    DuringAudioPrep = false;
    return;
}
[self lock];
[self setAudioPlayer: player];
[self ActivateAudioFunction];
[self unlock];

}

- (void) setAudioPlayer : (AVAudioPlayer *) player {
if (Player)
{
    if ([Player isPlaying] || Repeat)  // The indication was off???
        [Player stop];
    [Player release];
}
Player = player;

}

- (void) ActivateAudioFunction {
[Player setVolume: Volume];
[Player setNumberOfLoops: Repeat];    
[Player play];

DuringAudioPrep = false;

}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage