I am working on an app that manipulates HD photos. I am taking a photo with an AVCaptureSession, stopping it and then apply effects on that photo.
The thing that mak
I have encounter the same problem I have found this line is the main problem
[self.vImagePreview.layer addSublayer:captureVideoPreviewLayer];
Just remove the previewlayer from the super layer while deallocating and there is no memory issue. My deallocating function is as follow
-(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;
}
i called this function before popping and pushing any other view. It solved my issue.
I've had the same frustrations. I was using ARC in a project where I was presenting a camera using AV Foundation. After presenting and popping the view controller a few times, my app would receive a low memory warning, and subsequently crash. Instruments didn't help much either. I discovered the solution by experimenting:
Even though you are using ARC in your camera class, you can implement the dealloc method (just don't call super
on dealloc).
- (void)dealloc {
AVCaptureInput* input = [session.inputs objectAtIndex:0];
[session removeInput:input];
AVCaptureVideoDataOutput* output = [session.outputs objectAtIndex:0];
[session removeOutput:output];
[session stopRunning];
}
This takes care of stopping the AVCaptureSession and ensuring it has no inputs or outputs still alive.