- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
所以这是我的问题:我创建了一个自定义的 AVCaptureSession 来拍照。我不确定为什么,但是当您第三次调用 startRunning
时,它崩溃了。我实现了 didReceiveMemoryWarning
,但它在崩溃前没有被调用。我还在其上运行了仪器,并且没有与 AVCaptureSession 相关的内存泄漏。在 XCode 中也没有通过控制台的日志。
所以我的问题是...即使未调用 didReceiveMemoryWarning
是否也是内存问题?这是我的一些代码。
viewWillDisappear( View Controller )
- (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];
}
解除分配(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];
}
想法?如果您需要查看其他内容,请直接询问!提前致谢。
最佳答案
如果 didReceiveMemoryWarning
已正确实现并且从未被调用,则您的问题很可能不是由于内存不足造成的。当您开始运行捕获 session 时,还有许多其他方式会导致崩溃。您需要发布更多实现以及崩溃的详细信息以帮助调试此问题。
但是,您发布的代码存在许多效率低下和样式问题。注意在 Objective-C 中发送 nil 消息是完全没问题的。因此,在您的 viewWillDisappear
和 dealloc
方法中,您可以而且应该删除每个 if
测试可读性。例如,而不是:
if (cameraFlashButton) { [cameraFlashButton release]; }
只需使用:
[cameraFlashButton release];
如果您使用的是正确合成的访问器,那么替换像这样的行也会好得多
if (previewLayer) { [previewLayer release], previewLayer = nil; }
简单地
self.previewLayer = nil;
关于objective-c - AVCaptureSession "startRunning"崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11351687/
我的应用程序有各种按钮和其他操作的声音效果,如果设备静音/无声,它们不会按预期发出声音。但是,其中一个屏幕进行视频录制,如果导航到该屏幕,则可以在应用程序的任何位置启用所有音效。通过注释掉一些东西,我
所以这是我的问题:我创建了一个自定义的 AVCaptureSession 来拍照。我不确定为什么,但是当您第三次调用 startRunning 时,它崩溃了。我实现了 didReceiveMemory
我是一名优秀的程序员,十分优秀!