2

当我在我的应用程序中打开相机时,它工作正常,但是当我在我的应用程序中导航并返回相机视图并再次尝试在 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 并且相机开始工作,但直到我导航到我的最后一个视图并返回再次打开相机。

4

3 回答 3

3

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

像这样将 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;
  }
}

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

于 2013-08-21T08:35:05.250 回答
2

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

于 2013-08-21T12:16:06.567 回答
0

请尝试下面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]
}
于 2013-08-21T09:31:24.340 回答