AVCaptureSession startСбой при работе

Итак, вот моя проблема: я создал собственный AVCaptureSession, который делает снимки. Я не знаю почему, но при третьем вызове startRunning происходит сбой. Я реализовал didReceiveMemoryWarning, и он не вызывался до сбоя. Я также запускал на нем инструменты, и утечек памяти, связанных с AVCaptureSession, не было. Также не было логов через консоль в XCode.

Итак, мой вопрос: это проблема с памятью, хотя didReceiveMemoryWarning не вызывалась? Вот часть моего кода.

viewWillDisappear (Вьюконтроллер)

- (void)viewWillDisappear:(BOOL)animated {
if (cameraFlashButton) { [cameraFlashButton release]; }
if (switchCamera) { [switchCamera release]; }
if (cameraBadgeBack) { [cameraBadgeBack release]; }
if (cameraBadgeNumber) { [cameraBadgeNumber release]; }
if (cameraUseButton) { [cameraUseButton release]; }
if (cameraOverlayView) { [cameraOverlayView release]; }
if (blackOverlay) { [blackOverlay release]; }
if (loadingIndicator) { [loadingIndicator release]; }
if (cameraPickButton) { [cameraPickButton release]; }
if (whiteOverlay) { [whiteOverlay release]; }
if (imageOverlay) { [imageOverlay release]; }
if (captureManager) { [captureManager release], captureManager = nil; }
if (theCaptureSession) { [theCaptureSession release], theCaptureSession = nil; }
[super viewWillDisappear:YES];
}

Dealloc (CaptureSessionManager)

- (void)dealloc {
if ([self captureSession]) { [[self captureSession] stopRunning]; }
if (previewLayer) { [previewLayer release], previewLayer = nil; }
if (captureSession) { [captureSession release], captureSession = nil; }
if (stillImageOutput) { [stillImageOutput release], stillImageOutput = nil; }
if (stillImage) { [stillImage release], stillImage = nil; }
[super dealloc];
}

Идеи? Если вам нужно увидеть что-то еще, просто спросите! Заранее спасибо.


person iosfreak    schedule 05.07.2012    source источник


Ответы (1)


Если didReceiveMemoryWarning был правильно реализован и никогда не вызывался, ваша проблема, скорее всего, не связана с нехваткой памяти. Есть много других способов, которыми вы можете получить сбой при запуске сеанса захвата. Вам нужно будет опубликовать больше своей реализации вместе с подробностями сбоя, чтобы помочь отладить это.

Однако код, который вы разместили, имеет ряд недостатков и проблем со стилем. Обратите внимание, что в сообщениях Objective-C для nil все в порядке. Таким образом, в ваших методах viewWillDisappear и dealloc вы можете и должны удалить все if проверки читабельности. Например, вместо:

if (cameraFlashButton) { [cameraFlashButton release]; }

просто используйте:

[cameraFlashButton release];

Если вы используете правильно синтезированные методы доступа, гораздо лучше заменить такие строки, как

if (previewLayer) { [previewLayer release], previewLayer = nil; }

с просто

self.previewLayer = nil;
person torrey.lyons    schedule 05.07.2012
comment
Немного повозившись с ним, я обнаружил проблему. По-видимому, это была проблема с памятью, но я быстро исправил ее, изменив разрешение на более низкое качество, и оно работает быстрее, чем когда-либо. - person iosfreak; 06.07.2012
comment
вы загрузите ответьте, что вы сделали - person java; 05.09.2013