收到内存警告。带 ipad 相机

Posted

技术标签:

【中文标题】收到内存警告。带 ipad 相机【英文标题】:Received memory warning. with ipad camera 【发布时间】:2013-08-21 08:10:50 【问题描述】:

当我在我的应用程序中打开相机时,它工作正常,但是当我在我的应用程序中导航并返回相机视图并再次尝试在 iPad 中打开我的相机时,应用程序崩溃并给我“收到内存警告”。应用程序在 iPhone 上运行良好,而这个问题只出现在 iPad 上。

我的项目没有 ARC,所以我将我的项目转换为 ARC 以希望获得良好的结果,但我的应用程序在很少导航后仍然在相机上崩溃。 谁能告诉我如何使用 iPad 相机减少内存空间,以便我的应用程序停止收到内存警告。

这是我的相机代码

if ([UIImagePickerController isSourceTypeAvailable:
         UIImagePickerControllerSourceTypeCamera])
    
        imagePicker=[[UIImagePickerController alloc] init];
        imagePicker.delegate = self;
        imagePicker.sourceType =UIImagePickerControllerSourceTypeCamera;
        imagePicker.allowsEditing = NO;
        //imagePicker.modalPresentationStyle = UIModalPresentationFullScreen;

        [self presentViewController:imagePicker animated:YES completion:nil];
    

这是我获取图像的地方

-(void)imagePickerController:(UIImagePickerController *)picker     didFinishPickingMediaWithInfo:(NSDictionary *)info

        [Array removeAllObjects];

        [picker dismissViewControllerAnimated:YES completion:nil];
        image = [info objectForKey:UIImagePickerControllerOriginalImage];

        [array addObject:image];
        image=nil;


我也尝试使用 popOverview 进行摄像头,但也没有用。

在我调用 UIImagePickerController 的 viewController 中,我使用了 5 个动画,在我在 viewWillAppear 中调用动画之前,应用程序崩溃了,所以我将动画调用更改为 ViewDidLoad 并且相机开始工作,但直到我导航到我的最后一个视图并再次打开相机。

【问题讨论】:

问题不在于相机。您可能没有正确丢弃使用过的和不必要的对象。 您是在使用 ios 默认的相机选择器还是将相机连接到预览层或例如您是使用 OpenGL 还是 CoreImage 处理每个视频缓冲区? @Desdenova 我现在正在使用 ARC,我该如何释放对象。 @Markus 不,兄弟我正在打开相机而不是使用 openGL 试试这个。 raywenderlich.com/23037/how-to-use-instruments-in-xcode 【参考方案1】:

我遇到了同样的问题,所以我喜欢这个。

像这样将 UIImagePickerController 设置为静态。

 static UIImagePickerController *imagePicker;

当您在此删除中获得图像时。

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info  
  @autoreleasepool // to release memory

   // Probelm is you image size. 
   // When you get this image it is vary large.
   // And i hope  you are creating multiple copy's of this image.

   // when you get image in 
   UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

    // In last set image as nil
   image = nil;
  

希望这能解决你的问题.. :-)

【讨论】:

xcode 在静态“类型名称不允许指定存储类”上显示错误 关注***.com/questions/14960249/… --> 在女巫电话中,您在 .h 或 .m 中声明静态变量均值。如果它在 .h 中,则从中删除并在 .m 文件中重新声明【参考方案2】:

尝试在没有动画的情况下运行您的应用,然后尝试,如果它有效,那么您需要改进动画内存分配,因为动画需要大量内存。

【讨论】:

【参考方案3】:

请尝试下面的代码。在弹出窗口中尝试UIImagePickerController

if([UIImagePickerContrller isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])

        UIImagePickerController *controller = [[UIImagePickerController alloc] init];
        controller.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        controller.allowsEditing = YES;
        controller.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
        controller.delegate = self;
        UIPopoverController *popController = [[UIPopoverController alloc]  initWithContentViewController:controller];
        popController.popoverContentSize = CGSizeMake(350.0f, 500);
        [popController presentPopoverFromRect: self.button.frame inView:self.button.superview
                     permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES]

【讨论】:

我已经在我的问题中提到 popover 没有解决我的问题。第二在你的代码中你给 UIImagePickerControllerSourceTypePhotoLibrary 作为源类型?

以上是关于收到内存警告。带 ipad 相机的主要内容,如果未能解决你的问题,请参考以下文章

从 iphone 相机拍照时收到 iphone 中的内存警告问题

收到内存警告。 iPad 中的级别=1

新 iPad:内存不足警告未出现?

将图像选择器相机转移到一个视图到另一个视图时的内存警告

应用程序收到内存不足警告但只有 5.7MB 的活动字节

应用程序崩溃 - 内存警告 Iphone SDK