首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVCaptureSession "startRunning“崩溃

AVCaptureSession "startRunning“崩溃
EN

Stack Overflow用户
提问于 2012-07-06 03:59:30
回答 1查看 2K关注 0票数 3

这就是我的问题:我已经创建了一个可以拍照的自定义AVCaptureSession。我不知道为什么,但第三次调用startRunning时,它崩溃了。我实现了didReceiveMemoryWarning,它在崩溃之前没有被调用。我还在它上面运行了仪器,没有与AVCaptureSession相关的内存泄漏。在XCode中也没有通过控制台的日志。

所以我的问题是。即使没有调用didReceiveMemoryWarning,也会出现内存问题吗?下面是我的一些代码。

viewWillDisappear (ViewController)

代码语言:javascript
复制
- (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)

代码语言:javascript
复制
- (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];
}

想法?如果你还需要看别的什么,尽管说!提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-06 04:25:54

如果正确地实现了didReceiveMemoryWarning并且从未调用它,那么您的问题很可能不是由于内存不足造成的。当您启动捕获会话运行时,还有许多其他方法会导致崩溃。您需要发布更多的实现以及崩溃的详细信息,以帮助调试。

但是,您发布的代码存在许多低效和样式问题。注意,在Objective-C中,发送到nil的消息是完全正常的。因此,在您的viewWillDisappeardealloc方法中,您可以而且应该删除所有if测试的可读性。例如,而不是:

代码语言:javascript
复制
if (cameraFlashButton) { [cameraFlashButton release]; }

只需使用:

代码语言:javascript
复制
[cameraFlashButton release];

如果您正在使用正确合成的访问器,那么替换如下代码行也会更好

代码语言:javascript
复制
if (previewLayer) { [previewLayer release], previewLayer = nil; }

使用简单的

代码语言:javascript
复制
self.previewLayer = nil;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11351687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档