Mi sono imbattuto in un problema simile. Chiamare stopRunning bloccherebbe l'app per 8-10 secondi.
Alla fine ho rintracciato il problema: stavo chiamando stopRunning su un thread diverso dal thread principale. Questo thread secondario è stato utilizzato per tutte le transazioni su AVCaptureSession. Il problema si è verificato perché dopo aver inviato la chiamata a stopRunning, ho bloccato il thread principale in attesa del completamento. Sfortunatamente, stopRunning invia qualcosa al thread principale e blocca l'attesa del completamento. La cosa stopRunning era in attesa alla fine scaduta e segnalato un errore nel - (void) onRuntimeError: (NSNotification *) n callback: Error Domain = AVFoundationErrorDomain Code = -11819 "Can not Complete Action" UserInfo = 0x19e43c90 {NSLocalizedRecoverySuggestion = Riprova più tardi. NSLocalizedDescription = Impossibile completare l'azione}
La soluzione nel mio caso era semplicemente non bloccare il thread principale dopo aver chiamato stopRunning. Fortunatamente per me è stato facile (e qualcosa che Apple raccomanda più o meno comunque).
Ho notato variazioni su questo tema in altre domande e la soluzione è sempre stata quella di rielaborare il codice. Speriamo che questo fornisca una migliore comprensione del perché il problema si sta verificando.
fonte
2014-08-12 15:06:10
Prova questo: http: //stackoverflow.com/questions/11905505/avcapturesession-stop-running-take-a-long-time – nickcheng
Sì, questo sembra risolvere il problema. Quando lo aggiungi come risposta, lo accetto. –