3

所以这里是我的问题:我创建了一个自定义的AVCaptureSession拍照。我不知道为什么,但第三次你拨打startRunning,它崩溃了。我实施了didReceiveMemoryWarning,它在坠毁之前没有被调用。我还在上面运行了仪器,并且没有与AVCaptureSession相关的内存泄漏。在XCode中也没有通过控制台的日志。AVCaptureSession“startRunning”crash

所以我的问题是...即使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]; 
} 

想法?如果您需要查看其他内容,只需询问!提前致谢。

回答

1

如果didReceiveMemoryWarning已正确实施并且从未调用,则说明您的问题可能不是由于内存不足。在开始捕捉会话运行时,还有很多其他方式可能导致崩溃。你需要发布更多的实现以及崩溃的细节来帮助调试。

但是,您发布的代码有许多低效率和样式问题。在Objective-C消息中注意到零是非常好的。因此,在您的viewWillDisappeardealloc方法中,您可以并应该删除每个if测试可读性。例如,而不是:

if (cameraFlashButton) { [cameraFlashButton release]; } 

只需使用:

[cameraFlashButton release]; 

如果使用正确的合成存取它也更好用简单

取代线条状

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

self.previewLayer = nil; 
+0

搞砸了一下后,我fo解决问题。显然这是一个内存问题,但我通过将分辨率更改为较低质量,并且比以往更快捷地修复了问题。 – iosfreak 2012-07-06 03:18:09

+0

你会上传答案你做了什么 – java 2013-09-05 10:01:17