AVCaptureVideoPreviewLayer随着时间的推移运行得更慢

时间:2013-12-03 22:35:29

标签: ios ios6 uiviewcontroller avcapturesession

我有一个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];

我有什么不对吗?或者你有任何线索吗?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,因为我正在添加具有已添加会话的层。

ApplicationIntent=ReadOnly

请在上面的行上设置断点,您会发现需要3-4秒才能继续。有时会创建内存警告,有时则不会。 因此只需添加一下,检查是否已添加,如下所示。

self.captureVideoPreviewLayer = [AVCaptureVideoPreviewLayer 
                layerWithSession:self.session];