Первым делом я ввел логин в методы освобождения всех файлов AVCam. Я быстро обнаружил, что AVCamCaptureManager и AVCamRecorder не были освобождены, когда был AVCamViewController. Я проверил вызовы сохранения и освобождения, и оказалось, что они уравновешены, поэтому я поставил точку останова на [выпуск captureManager] и обнаружил, что он имеет значение keepCount, равное 2 ПОСЛЕ выпуска (и, следовательно, освобождение AVCamCaptureManager не вызывалось).
Затем я прошел через процесс создания диспетчера захвата и обнаружил, что он имеет счетчик сохранения 3 сразу после вызова метода init.
Пройдя через метод инициализации и проверив счетчик удержания в каждой строке, я обнаружил, что следующие две строки увеличивают счетчик удержания:
[self setDeviceConnectedObserver=[notificationCenter addObserverForName:AVCaptureDeviceWasConnectedNotification object:nil queue:nil usingBlock:deviceConnectedBlock]];
[self setDeviceDisconnectedObserver=[notificationCenter addObserverForName:AVCaptureDeviceWasDisconnectedNotification object:nil queue:nil usingBlock:deviceDisconnectedBlock]];
Просматривая, я обнаружил, что аналоги removeObserver находились ВНУТРИ метода освобождения AVCamCaptureManager (который не вызывался), и поэтому счетчик сохранения никогда не опускался до 0.
Чтобы исправить это, я создал новый общедоступный метод removeObservers:
-(void)removeObservers {
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter removeObserver:[self deviceConnectedObserver]];
[notificationCenter removeObserver:[self deviceConnectedObserver]];
}
и выведение тех же строк из метода освобождения AVCamCaptureManager.
Вызов [captureManager removeObservers]; и ЗАТЕМ вызов [releaseManager release]; в методе освобождения AVCamViewController успешно сбрасывает счетчик удержания до 0.
Тестирование с помощью монитора активности теперь показывает, что процесс mediaserverd гудит всего на 5-17 МБ, и сбой прекращается!
Надеюсь, это поможет кому-нибудь еще, у кого есть эта проблема!
person
Red Nightingale
schedule
25.10.2011