Iphone AVCaptureSession获取内存警告并无原因崩溃

Iphone AVCaptureSession获取内存警告并无原因崩溃,iphone,warnings,avcapturesession,Iphone,Warnings,Avcapturesession,我正在开发一款处理高清照片的应用程序。我正在使用AVCaptureSession拍摄一张照片,将其停止,然后对该照片应用效果 让我发疯的是,一切都很好,仪器告诉我,我会及时释放所有正确使用的记忆。它非常高,是的,有时达到100mb。但它下降得很快 然后我重新启动捕获会话,并收到内存警告。这绝对没有理由;如果释放了我使用的所有内存。。。然后,下次我将重新启动捕获会话时,应用程序将崩溃。没有消息,没有日志,什么都没有 我不知道如何解决这个问题,我不知道去哪里找。。。如果有人能帮我一点忙,我会很高兴的

我正在开发一款处理高清照片的应用程序。我正在使用AVCaptureSession拍摄一张照片,将其停止,然后对该照片应用效果

让我发疯的是,一切都很好,仪器告诉我,我会及时释放所有正确使用的记忆。它非常高,是的,有时达到100mb。但它下降得很快

然后我重新启动捕获会话,并收到内存警告。这绝对没有理由;如果释放了我使用的所有内存。。。然后,下次我将重新启动捕获会话时,应用程序将崩溃。没有消息,没有日志,什么都没有

我不知道如何解决这个问题,我不知道去哪里找。。。如果有人能帮我一点忙,我会很高兴的


提前谢谢

我也经历过同样的挫折。我在ARC基金会的项目中使用ARC。在显示并弹出视图控制器几次后,我的应用程序将收到内存不足警告,随后崩溃。仪器也帮不了什么忙。我通过实验发现了解决方案:

即使您在camera类中使用ARC,也可以实现dealloc方法(只是不要在dealloc上调用
super


这负责停止AVCaptureSession,并确保它没有仍然活动的输入或输出。

我遇到了与我发现的主要问题相同的问题

[self.vImagePreview.layer addSublayer:captureVideoPreviewLayer];
只需在解除分配时从超级层中删除previewlayer,就不会有内存问题。我的释放功能如下

 -(void)deallocSession
{
[captureVideoPreviewLayer removeFromSuperlayer];
for(AVCaptureInput *input1 in session.inputs) {
    [session removeInput:input1];
}

for(AVCaptureOutput *output1 in session.outputs) {
    [session removeOutput:output1];
}
[session stopRunning];
session=nil;
outputSettings=nil;
device=nil;
input=nil;
captureVideoPreviewLayer=nil;
stillImageOutput=nil;
self.vImagePreview=nil;

}

在弹出和推送任何其他视图之前,我调用了这个函数。它解决了我的问题。

@bryndodayle你救了我的命,非常感谢!为什么只删除第一个输入和输出?为什么不删除所有输入和输出?
 -(void)deallocSession
{
[captureVideoPreviewLayer removeFromSuperlayer];
for(AVCaptureInput *input1 in session.inputs) {
    [session removeInput:input1];
}

for(AVCaptureOutput *output1 in session.outputs) {
    [session removeOutput:output1];
}
[session stopRunning];
session=nil;
outputSettings=nil;
device=nil;
input=nil;
captureVideoPreviewLayer=nil;
stillImageOutput=nil;
self.vImagePreview=nil;

}