【问题标题】:recieved memory warning and crash the app when capture more than 4 images?捕获超过 4 张图像时收到内存警告并导致应用程序崩溃?
【发布时间】:2013-05-16 06:54:55
【问题描述】:

在我的应用中,我需要将 6 张图片上传到服务器。我捕获图像然后上传它,然后转到下一张并执行相同的操作。

当我到达第 5 张图片并收到 3 或 4 个内存警告后,应用程序崩溃

这是图像选择器的代码

-(void) TakePhotoWithCamera {
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        picker1 = [[UIImagePickerController alloc] init];
        picker1.sourceType = UIImagePickerControllerSourceTypeCamera;
        picker1.allowsEditing = YES;
        picker1.delegate = self;
        [self presentViewController:picker1 animated:YES completion:nil];
    }
}

这是完成捕获时的方法

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    UIImage * img = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
    [picker dismissViewControllerAnimated:YES completion:nil];
    UIButton * tappedBtn = (UIButton *) [self.horizontalScrollView viewWithTag:chosenImgBtnTag];
    [tappedBtn setImage:img forState:UIControlStateNormal];
    [self useImage:img];   // this method upload the image to the server
    info = nil;
}

这里是setImage的方法

 - (void) useImage:(UIImage *) image {

    currentImageToUpload = image;
   [self showLoadingIndicatorOnImages];
   [[CarAdsManager sharedInstance] uploadImage:image WithDelegate:self];
 }

所以请在这件事上提供帮助?

【问题讨论】:

  • 你在分配新的picker1之前释放picker1吗?
  • 我正在使用 ARC 所以我没有使用发布方法
  • 你是ARC吗? useImage: 会发生什么?
  • 我只是把方法,,它调用api,所以我可以上传到服务器
  • 您检查过以下答案吗?它解决了同样的问题。

标签: ios objective-c xcode didreceivememorywarning


【解决方案1】:

您应该在捕获图像后重新调整您的图像大小(480, 480),如下所示,

UIImage *getNewImage;
CGSize newSize = CGSizeMake(480, 480);
UIGraphicsBeginImageContext(newSize);
[capturedImage drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
getNewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

它将“getNewImage”作为图像返回。你可以上传这张图片。它将减少您的内存警告崩溃。

【讨论】:

  • 试试吧,但没有什么新东西,仍然是同样的问题,它上传速度更快,但在捕获第 4 张图像后一直崩溃
  • 关闭您的视图控制器,然后将您的图像用于下一个视图控制器。它可能会帮助你。
  • 我找到了解决方案,就是将选择器定义为静态
猜你喜欢
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 2013-06-27
  • 2011-09-12
相关资源
最近更新 更多