Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c AVCaptureSession启动内存警告_Objective C_Ios_Memory Management_Avcapturesession - Fatal编程技术网

Objective c AVCaptureSession启动内存警告

Objective c AVCaptureSession启动内存警告,objective-c,ios,memory-management,avcapturesession,Objective C,Ios,Memory Management,Avcapturesession,每次启动AVCaptureSession时,我都会收到一条内存警告,导致超时崩溃。 我以异步方式启动会话,Instruments工具说应用程序消耗了大约2MB的内存。 你知道如何克服这个问题吗?2MB的分配内存是否太多 谢谢! [iOS 4.3,ARC] @autoreleasepool { //Init capture session session = [[AVCaptureSession alloc] init]; session.sessionPreset = A

每次启动AVCaptureSession时,我都会收到一条内存警告,导致超时崩溃。
我以异步方式启动会话,Instruments工具说应用程序消耗了大约2MB的内存。 你知道如何克服这个问题吗?2MB的分配内存是否太多

谢谢! [iOS 4.3,ARC]

@autoreleasepool {
    //Init capture session
    session = [[AVCaptureSession alloc] init];
    session.sessionPreset = AVCaptureSessionPresetPhoto;


    //Resize container view
    CGRect cameraContainerFrame = cameraContainerView.frame;
    cameraContainerFrame.size = CGSizeMake(320, 426);
    cameraContainerView.frame = cameraContainerFrame;

    CALayer *viewLayer = [cameraContainerView layer];
    [viewLayer setMasksToBounds:YES];

    //Create preview layer
    captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];

    CGRect bounds = [cameraContainerView bounds];
    [captureVideoPreviewLayer setFrame:bounds];


    if ([captureVideoPreviewLayer isOrientationSupported]) {
        [captureVideoPreviewLayer setOrientation:AVCaptureVideoOrientationPortrait];
    }    
    [captureVideoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];

    [viewLayer addSublayer:captureVideoPreviewLayer];

    //Get input device
    captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    if ([captureDevice lockForConfiguration:nil]){
        captureDevice.focusMode = AVCaptureFocusModeContinuousAutoFocus;
        captureDevice.whiteBalanceMode = AVCaptureWhiteBalanceModeContinuousAutoWhiteBalance;
        [captureDevice unlockForConfiguration];
    }

    NSError *error = nil;
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&error];
    if (!input) {
        // Handle the error appropriately.
        DLog(@"ERROR: trying to open camera: %@", error);
    }
    //Add input to session
    [session addInput:input];

    //Output
    stillImageOutput = [[AVCaptureStillImageOutput alloc] init];
    NSDictionary *outputSettings = [NSDictionary dictionaryWithObject:AVVideoCodecJPEG forKey:AVVideoCodecKey];
    [stillImageOutput setOutputSettings:outputSettings];
    [session addOutput:stillImageOutput];

    //Save state
    cameraSessionInitialized = YES;
    [session startRunning];
}

如果您不关心质量,这确实可以消除内存警告。我正在试图找出如何使它与AVCaptureSessionPresetPhoto一起工作。

我没有感觉到
AVCaptureSessionPresetPhoto
AVCaptureSessionPresetMedium
之间的质量变化,所以您的回答帮助了我,谢谢
session.sessionPreset = AVCaptureSessionPresetMedium;