Pierwszą rzeczą, którą zrobiłem było umieszczenie logowania w dealloc metodach wszystkich plików AVCam. Szybko odkryłem, że AVCamCaptureManager i AVCamRecorder nie zostały zwolnione, gdy był AVCamViewController. Sprawdziłem zachowanie i zwalniałem połączenia i wyglądało na to, że balansują, więc ustawiłem punkt przerwania w wydaniu [captureManager] i odkryłem, że miał on wartość 2 po wydaniu (i dlatego nie wywołano dealloc AVCamCapture Manager).
Następnie przeszedłem przez proces tworzenia menedżera przechwytywania i odkryłem, że ma on liczbę zachowań równą 3 natychmiast po wywołaniu metody init.
Stepping dzięki metodzie init oraz sprawdzenie zachować liczyć na każdej linii odkryłem następujące dwa wiersze były zarówno zwiększając Hrabia zachować:
[self setDeviceConnectedObserver=[notificationCenter addObserverForName:AVCaptureDeviceWasConnectedNotification object:nil queue:nil usingBlock:deviceConnectedBlock]];
[self setDeviceDisconnectedObserver=[notificationCenter addObserverForName:AVCaptureDeviceWasDisconnectedNotification object:nil queue:nil usingBlock:deviceDisconnectedBlock]];
pominie znalazłem, że partnerami removeObserver były wewnątrz metody dealloc z AVCamCaptureManager (który nie był o nazwie), a więc liczba zachowują nigdy nie spadła do 0.
aby go naprawić ja stworzył nową metodę removeObservers publicznej:
-(void)removeObservers {
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter removeObserver:[self deviceConnectedObserver]];
[notificationCenter removeObserver:[self deviceConnectedObserver]];
}
i wykonanie tych samych linii poza metodą dealloc AVCamCaptureManager.
Wywołanie [captureManager removeObservers]; i NASTĘPNIE dzwoniąc [releaseManager release]; w metodzie dealloc AVCamViewController z powodzeniem pomniejsza liczbę zatrzymań do 0.
Testowanie za pomocą Monitora aktywności ma teraz proces serwera multimediów nuci tylko 5-17Mb, a zawieszenie się zatrzymuje!
Mam nadzieję, że to pomoże każdemu, kto ma ten problem!
Dzięki! Proszę podzielić odpowiedź na odpowiedź, którą następnie można zaakceptować: [Etykieta odpowiedzi na własne pytanie] (http://meta.stackexchange.com/questions/17845/etiquette- na -answering-your-own-question) i [Zamieszczanie i udzielanie odpowiedzi na pytania, na które już znalazłeś odpowiedź] (http://meta.stackexchange.com/questions/2706/posting-and-answering-questions-you-ha---)--). – sehe
Próbowałem tego, ale ponieważ nie jestem użytkownikiem klasy premium, nie pozwoliłbym sobie odpowiedzieć na moje własne pytanie w ciągu 24 godzin ... nie miałem czasu, żeby z nim pogodzić (lub zapomnieć o tym, co chciałem nagrać) ... Zobaczę, czy mogę to teraz zrobić. –