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