【问题标题】:UIImagePickerControllerOriginalImage received memory warning and getting crashUIImagePickerControllerOriginalImage 收到内存警告并崩溃
【发布时间】:2014-04-19 14:16:35
【问题描述】:

我在右上角有一个 UICollectionView 和一个条形按钮(CameraViewController1 : UICollectionViewController)。流程是当我拍照时它移动到一个新的视图控制器,可以裁剪图像。用户有两个选项使用和取消之后选择此选项中的任何一个,它会将图像返回到集合视图并像单元格一样排列。我想拍很多照片。但我最多只能拍摄 3 张照片,因为应用程序立即崩溃并显示消息“应用程序终止由于内存压力”。但最糟糕的是,当我在运行 iOS 7 的 iPhone 5 中测试相同的应用程序时,没有发生崩溃。当我在运行 iOS 7 的 iPhone 4 中测试相同的应用程序时,它会崩溃并产生收到的内存警告。

这是我的代码

- (IBAction)TakeaPhoto:(id)sender {

    [[UIApplication sharedApplication]setStatusBarHidden:FALSE withAnimation:NO];

    gallery=0;
    picker1 = [[UIImagePickerController alloc] init];
    picker1.delegate = self;
    self.resizeableCropArea =YES;
    self.cropSize=CGSizeMake(300,350);
    //picker1.allowsEditing = YES;
    picker1.sourceType = UIImagePickerControllerSourceTypeCamera;

    [self presentViewController:picker1 animated:YES completion:NULL];
}


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

    [self dismissViewControllerAnimated:YES completion:NULL];

    UIImage *image =  [info objectForKey: UIImagePickerControllerOriginalImage];

    image_cap = [self imageTemp:image scaledToSize:CGSizeMake(320, 370)]; 


    dataTemp = UIImageJPEGRepresentation(image,0.0);

    CropViewController *cropController = [[CropViewController alloc] init];

    cropController.sourceImage = [info objectForKey:UIImagePickerControllerOriginalImage];

    Original_img = UIImageJPEGRepresentation(cropController.sourceImage,0.0);

    [original_image addObject:[UIImage imageWithData:Original_img]]; //original_image Nsmutablearray

    NSLog(@"source image=%@",cropController.sourceImage);

    cropController.resizeableCropArea = self.resizeableCropArea;

    cropController.cropSize = self.cropSize;

    cropController.delegate = self;

    Cancel_Image= cropController.sourceImage;

    [self.navigationController pushViewController:cropController animated:YES];

}

【问题讨论】:

  • 你每次都分配 UIImagePickerController 所以使用这个代码 picker1 = [[UIImagePickerController alloc] init];在 viewdidload 方法中。

标签: ios iphone objective-c uiimagepickercontroller memory-warning


【解决方案1】:

@Ramanan R R,我完全同意@Ru​​shabh 的评论。 您正在多次分配 UIImagePickerController,因为 TakeaPhoto 方法调用您正在分配 UIImagePickerConrtoller,因此没有必要多次分配。它会破坏内存,这就是您的应用程序将终止或崩溃的原因.. 只需在 viewDidLoad 中分配一次,确保再做一件事,做 UIImagePickerController 作为一个强大的属性,因为过去我花了一整天的时间来解决问题......

希望这对您有用,并且您的应用程序将顺利运行...:)

【讨论】:

  • 是的,我尝试在 didload 中添加它,但经历了同样的地狱!非常感谢您提到更改强属性,以前是保留。
猜你喜欢
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
  • 2011-10-15
  • 1970-01-01
相关资源
最近更新 更多