El sonido precargado de AVAudioPlayer gotea de la memory

Tengo una instancia de AVAudioPlayer que carga el sonido en la memory con audioPlayer.prepareToPlay() , y luego de unos pocos comienzan a reproducirlo. Tengo un problema que en aproximadamente diez minutos después de entrar en segundo plano, se filtra de la memory y no estoy preparado. Después de las horas alimentadas, no tengo la capacidad de ejecutar prepareToPlay() nuevamente. ¿Cómo dejar ese sonido precargado en la memory por un largo ploop? Estoy preparando el sonido para reproducir en el método applicationDidFinishLaunchingWithOptions :

 let dispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) dispatch_async(dispatchQueue, {[weak self] in var audioSessionError: NSError? let audioSession = AVAudioSession.shanetworkingInstance() NSNotificationCenter.defaultCenter().addObserver(self!, selector: "handleInterruption:", name: AVAudioSessionInterruptionNotification, object: nil) audioSession.setActive(true, error: nil) if (audioSession.setCategory(AVAudioSessionCategoryPlayback, error: &audioSessionError)) { println("Successfully set the audio session") } else { println("Could not set the audio session") } let filePath = NSBundle.mainBundle().pathForResource("sound", ofType:"mp3") let fileData = NSData(contentsOfFile: filePath!, options: .DataReadingMappedIfSafe, error: nil) var error:NSError? self!.audioPlayer = AVAudioPlayer(data: fileData, error: &error) self!.audioPlayer?.numberOfLoops = -1 self!.audioPlayer?.delegate = self if (self?.audioPlayer?.prepareToPlay() != false) { println("Successfully prepanetworking for playing") } else { println("Failed to prepare for playing") } }) 

Luego, en didReceiveRemoteNotification , estoy tratando de reproducirlo en segundo plano: self.audioPlayer?.play() , devuelve true . Probablemente funcione, pero después de unos 10 a 20 minutos no funciona. Y tenga en count que .play() ahora devuelve false .

  1. ¿Hay algún sentido para deshabilitar ARC (Recuento automático de references) para liberar y repeler audioPlayer manualmente?

  2. Tal vez necesito usar API de nivel inferior como OpenAL ? Sin embargo, no lo utilizaré ya que está en desuso en iOS 9 y luego necesitaré reescribirlo sin OpenAL .

  3. ¿Alguna idea más? Tal vez necesite usar Audio Units con RemoteIO ? Si funciona, proporcione algunos ejemplos, por favor.

  4. Tal vez haya frameworks de terceros como ObjectAL , una implementación fácil de OpenAL . Como sé, está disponible en iOS 9.

Estos methods son solo mis supuestos. Pero la pregunta principal sigue siendo la misma: ¿Funcionarán esos methods desde el background?

Simplemente deshabilite ARC. Cuando ingresas en el backgroud, entonces, si no lo usas, se libera. En Swift, crea AVAudioPlayer como object Unmanaged<T> .