我有一个UIViewController,我在init方法上设置一个AVCaptureVideoPreviewLayer来拍照。拍摄照片时,我会关闭UIViewController。
每次打开这个UIViewController时,Ipad都会运行得慢,直到它崩溃。我得到一个内存警告,所以我认为它不是免费的,另一方面,我使用ARC所以我支持每次我解雇UIViewController它释放内存。
以下是UIViewController的init方法的代码:
session = [[AVCaptureSession alloc] init];
session.sessionPreset = AVCaptureSessionPresetMedium;
AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
captureVideoPreviewLayer.affineTransform = CGAffineTransformMakeRotation(M_PI+M_PI_2);
captureVideoPreviewLayer.frame = CGRectMake(45, 55, 512, 387);
[self.cameraPlace.layer addSublayer:captureVideoPreviewLayer];
NSArray *cameras=[AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
AVCaptureDevice *device = [cameras objectAtIndex:1];
NSError *error = nil;
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
[session addInput:input];
stillImageOutput = [[AVCaptureStillImageOutput alloc] init];
NSDictionary *outputSettings = [[NSDictionary alloc] initWithObjectsAndKeys: AVVideoCodecJPEG, AVVideoCodecKey, nil];
[stillImageOutput setOutputSettings:outputSettings];
[session addOutput:stillImageOutput];
[session startRunning];
我有什么不对吗?或者你有任何线索吗?
答案 0 :(得分:0)
我遇到了同样的问题,因为我正在添加具有已添加会话的层。
ApplicationIntent=ReadOnly
请在上面的行上设置断点,您会发现需要3-4秒才能继续。有时会创建内存警告,有时则不会。 因此只需添加一下,检查是否已添加,如下所示。
self.captureVideoPreviewLayer = [AVCaptureVideoPreviewLayer
layerWithSession:self.session];