La prima cosa che ho fatto è stata la registrazione nei metodi dealloc di tutti i file AVCam. Ho scoperto rapidamente che AVCamCaptureManager e AVCamRecorder non erano stati deallocati quando AVCamViewController era. Ho controllato la conservazione e rilasciato le chiamate e sembravano bilanciate, quindi ho inserito un punto di interruzione nella [versione captureManager] e ho scoperto che aveva un retainCount di 2 DOPO la versione (e quindi il dealloc di AVCamCaptureManager non veniva chiamato).
Successivamente ho passato il processo di creazione per il gestore di cattura e ho scoperto che aveva un conteggio di ritenzione di 3 immediatamente dopo la chiamata del metodo init.
Facendo un passo attraverso il metodo init e controllando il conteggio mantengono su ogni riga ho scoperto i seguenti due linee sono state sia incrementare il conteggio conservano:
[self setDeviceConnectedObserver=[notificationCenter addObserverForName:AVCaptureDeviceWasConnectedNotification object:nil queue:nil usingBlock:deviceConnectedBlock]];
[self setDeviceDisconnectedObserver=[notificationCenter addObserverForName:AVCaptureDeviceWasDisconnectedNotification object:nil queue:nil usingBlock:deviceDisconnectedBlock]];
Guardando attraverso Ho trovato che le controparti removeObserver erano all'interno del metodo dealloc del AVCamCaptureManager (che non veniva chiamato) e così il conteggio di conservare mai sceso a 0.
per risolvere il problema ho creato un nuovo metodo removeObservers pubblici:
-(void)removeObservers {
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter removeObserver:[self deviceConnectedObserver]];
[notificationCenter removeObserver:[self deviceConnectedObserver]];
}
e prendere le stesse linee FUORI dal metodo dealloc di AVCamCaptureManager.
Chiamare [captureManager removeObservers]; e POI chiamando [captureManager release]; nel metodo dealloc di AVCamViewController con successo il conteggio dei ritardi a 0.
I test con Activity Monitor ora hanno il ronzio del processo mediaserverd a soli 5-17Mb e l'arresto anomalo!
Spero che questo aiuti chiunque altro abbia questo problema!
fonte
2011-10-25 01:45:38
Grazie! Si prega di dividere la risposta in una risposta, che è possibile quindi accettare: [Etichetta per rispondere alla propria domanda] (http://meta.stackexchange.com/questions/17845/etiquette-for-answering-your-own-question) e [Postando e rispondendo alle domande che hai già trovato la risposta a] (http://meta.stackexchange.com/questions/2706/posting-and-answering-questions-you-have-already-found-the-answer-to) – sehe
Provato questo, ma visto che non sono un utente premium, non mi permetterebbe di rispondere alla mia domanda entro 24 ore ... non ho avuto il tempo di scherzare (o dimenticare quello che volevo registrare) ... Vedrò se posso farlo ora. –